Проблема 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

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

1 ответ

Решение

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

Другие вопросы по тегам