当我试图编译这个程序时
#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
在Mac OSX Sierra 10.12.1上使用LLVM版本8.0.0(clang-800.0.42.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中的某些内容一定有所改变。
答案 0 :(得分:2)
您尚未创建OpenGL上下文,也未将其设置为当前。 glGetError()
正在查找线程的当前上下文并索引到内部函数表中,以调用适合该上下文的“真实”实现。查找获取空的上下文地址,因此访问函数表会导致访问冲突。