2016-11-19 161 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