无法识别的命令行选项“框架”

时间:2018-09-15 18:30:45

标签: c opengl

我正在尝试在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 系统上工作? 还是需要将其链接到可可框架?

谢谢

2 个答案:

答案 0 :(得分:2)

我下载了此示例项目,并亲自对其进行了修改。它似乎不包含任何OSX特定的代码。只是它的Makefile仅用于OSX。

首先请确保您已安装libglfw3-devlibglew-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。