Проблема 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()
ищет текущий контекст потока и индексирует во внутреннюю таблицу функций, чтобы вызвать "реальную" реализацию, подходящую для этого контекста. Поиск получает нулевой контекстный адрес, поэтому доступ к таблице функций получает нарушение доступа.