所以我正在从openglbook学习OpenGL 4。
我在编辑器中复制并粘贴了简单的窗口创建程序,并使用 在OS X上编译OpenGL程序
gcc -o hello hello.c -framework OpenGL -framework GLUT
我收到以下错误:
Undefined symbols for architecture x86_64:
"_glewGetErrorString", referenced from:
_Initialize in chapter-c8ba2d.o
"_glewInit", referenced from:
_Initialize in chapter-c8ba2d.o
"_glutInitContextFlags", referenced from:
_InitWindow in chapter-c8ba2d.o
"_glutInitContextProfile", referenced from:
_InitWindow in chapter-c8ba2d.o
"_glutInitContextVersion", referenced from:
_InitWindow in chapter-c8ba2d.o
"_glutSetOption", referenced from:
_InitWindow in chapter-c8ba2d.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
理解正确,问题是-framework GLUT
这意味着您正在链接到Apple随macOS提供的GLUT框架,并位于/System/Library/Frameworks
文件夹中。不幸的是,此 GLUT 实现缺少当前版本的 FreeGLUT 提供的一些功能。OpenGLBook.com 教程都使用其中一些功能,因此,正如这里多次提到的,代码示例必须使用 FreeGLUT 进行编译。
当然,这几乎没有什么方法可以做到。最简单的方法是通过臭名昭著的自制包管理器安装 freeglut
,然后按照如下所述设置 CMake 项目。
因此,首先安装freeglut
brew install freeglut
然后通过将以下行添加到CMakeLists.txt
来设置 CMake 项目
find_package(FreeGLUT CONFIG REQUIRED)
find_package(glew CONFIG REQUIRED)
link_libraries(FreeGLUT::freeglut GLEW::GLEW)