2016-11-19 121 views
0

当我试图编译这个程序的OpenGL/GLUT问题

#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塞拉利昂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中肯定有某些变化。

回答

2

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

+0

根据SO上的其他答案来判断,没有上下文的glGetError的行为可能是平台相关的(或者只是未定义的)。但我认为你是对的,这是正确的答案。 – hanno