在Mac OS X上编译使用OpenGl的C程序

12

我正在尝试为我的计算机科学课程编译一个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吗? - Kevin
2个回答

24

在MacOS X中,您不是使用库来包含系统级API,而是使用框架。编译此程序的正确命令行为:

gcc -Wall -ansi -pedantic -O2 \
    main.o graphic.o imagem.o io.o \
    -o ep2 \
    -framework OpenGL -lGLU -lglut

需要注意的是,GLU 很可能也是 OpenGL 框架的一部分。在安装 GLU 之前,可能需要先安装 GLUT。


4
@ThiG.: 在 MacOS X 上,不需要使用 -lGL,而是需要使用 OpenGL 框架。此外,在源代码中可能需要将 #include <GL/gl.h> 替换为 #include <OpenGL/gl.h>。苹果公司严重患有“不自行开发”的综合症。 - datenwolf
+1 - 我想补充一点,如果楼主需要的话,还有一个GLUT框架可供选择。我不确定它是否与核心配置文件兼容。 - Brett Hale
@datenwolf 感谢您的回复。虽然我尝试了您说的方法,但返回了“ld: library not found for -lGLU”的错误信息。有什么想法吗? - Thi G.
1
@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> :) - Andon M. Coleman
1
@Bilow:因为macOS也曾经附带X11/GLX服务器和libGL.so(通过-lGL链接)是X11/GLX执行路径所需的接口库。因此,在典型的macOS系统上,这两个库都可以找到,但只有一个(OpenGL框架中的那个)可以通过本机GUI系统工作。 - datenwolf
显示剩余2条评论

7

我发现你必须使用

-framework OpenGL -framework GLUT

Reference


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接