[英]unrecognized command line option ‘-framework’
我正在嘗試在我的 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系統上工作? 或者它是否需要鏈接到 Cocoa 框架?
我下載了這個示例項目並自己修改了它。 它似乎不包含任何 OSX 特定的代碼; 只是它的 Makefile 只是為 OSX 編寫的。
首先確保你已經安裝了libglfw3-dev
和libglew-dev
包。 從 Ubuntu 包管理器安裝這些應該會自動引入所需的所有其他庫。
接下來,將 Makefile 的LIBS
行更改為讀取
LIBS = -lGLEW -lglfw -lGL -lm
libglew
,OSX 上名為libGLEW
的庫在(Debian 風格的)Linux 上稱為libglfw3
,OSX 上名為libglfw
的庫在 Linux 上稱為libglfw
。 -lGL
是 Linux 中的-framework OpenGL
等價物,並且-lm
-framework OpenGL
了數學庫(需要調用一次sqrt
),如果我沒記錯的話,它與 Linux 上的核心 C 庫分開,但在 OSX 上不存在。
您可能還需要調整 FLAGS 線。 這個設置對我有用:
FLAGS = -g -O2 -std=gnu99 -Wall -Wextra -Wpedantic
這里的重要變化是-std=gnu99
而不是-std=c99
。 更嚴格的c99模式比較麻煩; 它禁用了人們沒有意識到的擴展,比如math.h
定義了這個程序想要的常量M_PI
。 (它還有一個壞習慣,就是破壞與網絡相關的系統頭文件,原因太復雜,無法在這里討論。幸運的是,這個程序不使用網絡。)
我還添加了-Wall -Wextra -Wpedantic
,添加了-g
,並將-O3
更改為-O2
。 這些都是我習慣性地對我修補的每個 C 程序做的事情。 前兩個可以揭示問題,它們幾乎從不傷害; 在這種情況下,它們沒有任何明顯的區別。 第三是因為-O3
通常會使您的程序比-O2
慢。
-framework
選項特定於 Apple 平台,如 Cocoa、IOKit 和 CoreVideo 框架本身。 您使用的構建命令和選項適用於它會出現的 macOS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.