【问题标题】:Compiling a C program that uses OpenGl 4 in Mac OS X在 Mac OS X 中编译使用 OpenGL 4 的 C 程序
【发布时间】:2017-05-23 17:40:18
【问题描述】:

所以我正在从openglbook 学习 OpenGL 4。

我将简单的窗口创建程序复制并粘贴到我的编辑器中,然后使用 Compiling OpenGL programs on OS X 跟踪

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)

【问题讨论】:

  • 看起来 GLUT 未找到或不是为 x86_64 构建的。此页面可能会有所帮助:web.eecs.umich.edu/~sugih/courses/eecs487/glut-howto/#mac
  • 在我使用 c 学习 OpenGL 4 之前,我使用的是带有 c++ 的 OpenGL。当我用g++ -o out out.cpp -framework OpenGL -framework GLUT 编译我的程序时,它工作得很好。这是否意味着我的 GLUT 已构建,只是没有找到?谢谢
  • 唯一没有找到的符号来自 glut 和 glew。我假设您在某处有其他 gl 调用,这意味着它可以很好地链接到 OpenGL 框架。
  • GLEW 与 GLUT 和 OpenGL 是分开的。不是吗?

标签: c gcc opengl-4


【解决方案1】:

如果我理解正确,问题是 -framework GLUT 意味着您正在链接 Apple 与 macOS 一起提供的 GLUT 框架,并且位于 /System/Library/Frameworks 文件夹内。不幸的是,这个 GLUT 实现缺少当前版本的 FreeGLUT 提供的一些功能。并且 OpenGLBook.com 教程使用了其中的一些功能,因此,正如这里多次提到的,代码示例必须使用 FreeGLUT 编译。

当然,有几种方法可以做到这一点。最简单的方法是通过臭名昭著的 Homebrew 包管理器安装 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多