【问题标题】:OpenGL/GLUT issue on OSX SierraOSX Sierra 上的 OpenGL/GLUT 问题
【发布时间】:2016-11-19 22:49:56
【问题描述】:

当我试图编译这个程序时

#include <stdlib.h>
#include <GLUT/glut.h>
int main(int argc, char* argv[]) {
    glGetError();
    exit(1);
}

cc -std=c99 main.c -framework OpenGL -framework GLUT -framework Cocoa

在带有 LLVM 版本 8.0.0 (clang-800.0.42.1) 的 Mac OSX Sierra 10.12.1 上,出现分段错误:

* thread #1: tid = 0xc0a7d, 0x00007fffd7ecea07 libGL.dylib`glGetError + 13, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x00007fffd7ecea07 libGL.dylib`glGetError + 13

我完全不知道这里发生了什么。我只能假设这是某种链接问题。我无法使用 Sierra 之前的机器,但我之前没有遇到过这个问题,所以我认为 Sierra 中一定发生了一些变化。

【问题讨论】:

    标签: macos opengl glut macos-sierra


    【解决方案1】:

    您尚未创建 OpenGL 上下文,也未将其设为最新。 glGetError() 正在查找线程的当前上下文并索引到内部函数表以调用适合该上下文的“真实”实现。查找得到一个空上下文地址,因此函数表的访问得到了访问冲突。

    【讨论】:

    • 从 SO 上的其他一些答案来看,没有上下文的 glGetError 的行为可能取决于平台(或只是未定义)。但我认为你是对的,这是正确的答案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2013-08-24
    • 2011-07-18
    • 2015-01-06
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多