2016-11-19 2 views
0

Когда я пытаюсь скомпилировать эту программупроблема OpenGL/GLUT на OSX Sierra

#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 

Я полностью потерял, как к тому, что здесь происходит. Я могу только предположить, что это какая-то проблема связывания. У меня нет доступа к машине до Сьерры, но раньше я не сталкивался с этой проблемой, поэтому я предполагаю, что в Сьерре что-то должно было измениться.

ответ

2

Вы не создали контекст OpenGL и не сделали его актуальным. glGetError() просматривает текущий контекст потока и индексируется во внутреннюю таблицу функций, чтобы вызвать «реальную» реализацию, подходящую для этого контекста. Поиск получает нулевой контекстный адрес, поэтому доступ к таблице функций получает нарушение доступа.

+0

Судя по другим ответам на SO, поведение glGetError без контекста может быть зависимым от платформы (или просто не определено). Но я думаю, что вы правы, это правильный ответ. – hanno

Смежные вопросы