在 Mac OS X 中编译使用 OpenGL 的 C 程序
Posted
技术标签:
【中文标题】在 Mac OS X 中编译使用 OpenGL 的 C 程序【英文标题】:Compiling a C program that uses OpenGl in Mac OS X 【发布时间】:2013-08-31 16:28:20 【问题描述】:我正在尝试为我的 CS 类编译一个 C 程序。我在我的 Mac 上安装了命令行工具,所以我可能有 OpenGL。程序描述是为 Ubuntu 制作的,它说我可以使用:
gcc -Wall -ansi -pedantic -O2 main.o graphic.o imagem.o io.o -o ep2 -lGL -lGLU -lglut
我运行了它,它说:
ld: library not found for -lGL
我应该使用什么标志?我该怎么办?
【问题讨论】:
你真的需要-lGL -lGLU -lglut
的全部吗?
【参考方案1】:
在 MacOS X 中,您使用的不是库来包含系统级 API,而是 Frameworks。编译这个程序的正确命令行是
gcc -Wall -ansi -pedantic -O2 \
main.o graphic.o imagem.o io.o \
-o ep2 \
-framework OpenGL -lGLU -lglut
请注意,GLU 也可能是 OpenGL 框架的一部分。并且可能需要先安装 GLUT。
【讨论】:
@ThiG.:你不会在 MacOS X 上使用-lGL
。你在那里使用 OpenGL 框架。哦,在源代码中,您可能需要将#include <GL/gl.h>
替换为#include <OpenGL/gl.h>
。 Apple 深受 非此处发明 综合症的困扰。
+1 - 如果 OP 不幸需要它,我只想补充一点,还有一个可用的 GLUT 框架。我不知道它是否适合核心配置文件。
@datenwolf 感谢您的回复。虽然我尝试了你说的方式,但它返回了ld: library not found for -lGLU
。有什么想法吗?
@ThiG。 GLU 是 OS X 上 OpenGL 框架的一部分。在您的源代码中 #include <OpenGL/glu.h>
和在 Makefile 中的 -framework OpenGL
是您使用它所需要的一切。同样,还有一个 GLUT 框架;在 OS X 上使用#include <GLUT/glut.h>
和-framework GLUT
。确保在确定如何使用#include
标头时使用#ifdef __APPLE__
之类的东西,世界其他地方倾向于遵循约定:<GL/gl.h>
:)
@Bilow:因为 macOS 还使用 X11/GLX 服务器和 libGL.so
(通过 -lGL
链接)是 X11/GLX 执行路径所需的接口库。所以在典型的 macOS 系统上,这两个库都可以找到,但只有一个(OpenGL 框架中的那个)可以通过原生 GUI 系统工作。【参考方案2】:
我发现你必须使用
-framework OpenGL -framework GLUT
Reference
【讨论】:
以上是关于在 Mac OS X 中编译使用 OpenGL 的 C 程序的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Xcode 和终端在 Mac OS 上使用 OpenGL 库编译 c++ 文件
在 Mac OS X 10.9 中使用 GLFW 创建 OpenGL 3.3 上下文
在 Mac OS X 上使用 CGL 设置 OpenGL 上下文