在 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 上下文

Mac OS X 上的 OpenGL 纹理损坏

运行使用 OpenGL 3.3 的 mac os x c++ 程序

Mac OS X安装OpenGL