我正在尝试在Ubuntu 18.04系统上的https://github.com/fogleman/HelloGL中编译简约的C opengl代码,但是出现以下错误:
gcc -c -o build/matrix.o -std=c99 -O3 src/matrix.c
gcc -o main build/shader.o build/main.o build/util.o build/matrix.o -lglew -lglfw3 -framework Cocoa
-framework OpenGL -framework IOKit -framework CoreVideo -lm
gcc: error: Cocoa: No such file or directory
gcc: error: OpenGL: No such file or directory
gcc: error: IOKit: No such file or directory
gcc: error: CoreVideo: No such file or directory
gcc: error: unrecognized command line option ‘-framework’
gcc: error: unrecognized command line option ‘-framework’
gcc: error: unrecognized command line option ‘-framework’
gcc: error: unrecognized command line option ‘-framework’
Makefile:24: recipe for target 'main' failed
我确实意识到这是因为MakeFIle中的以下行是针对OSX的(大概):
LIBS = -lglew -lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo
是否有一种方法可以修改此行使其在 GNU / Linux 系统上工作? 还是需要将其链接到可可框架?
谢谢
答案 0 :(得分:2)
我下载了此示例项目,并亲自对其进行了修改。它似乎不包含任何OSX特定的代码。只是它的Makefile仅用于OSX。
首先请确保您已安装libglfw3-dev
和libglew-dev
软件包。从Ubuntu软件包管理器安装这些文件后,应会自动提取所有其他所需的库。
下一步,将Makefile的LIBS
行更改为
LIBS = -lGLEW -lglfw -lGL -lm
没有明显的原因,在(Debian风格的)Linux上,OSX上的libglew
库被称为libGLEW
,而在OSX上的libglfw3
库被称为{{1} }(在Linux上)。 libglfw
与Linux等效,-lGL
,-framework OpenGL
引入了数学库(需要一次调用-lm
),该数学库与Linux上的核心C库是分开的但如果我没记错的话,就不在OSX上。
您可能还需要调整标志线。此设置对我有用:
sqrt
此处的重要更改是FLAGS = -g -O2 -std=gnu99 -Wall -Wextra -Wpedantic
,而不是-std=gnu99
。更严格的c99模式很麻烦;它会禁用人们没有意识到的扩展,例如-std=c99
定义了程序想要的常量math.h
。 (由于太复杂的原因而无法进入网络,它也有打破网络相关系统头的坏习惯。幸运的是,该程序未使用网络。)
我还添加了M_PI
,添加了-Wall -Wextra -Wpedantic
,并将-g
更改为-O3
。这些都是我习惯使用的所有C程序要做的所有事情。前两个可以揭示问题,并且它们几乎从未受到伤害;在这种情况下,它们没有任何明显的不同。第三是因为-O3
often makes your program slower than -O2
would have。
答案 1 :(得分:0)
-framework
选项特定于Apple平台,因为Cocoa,IOKit和CoreVideo框架本身。您正在使用的构建命令和选项将用于macOS。