簡體   English   中英

無法識別的命令行選項“-framework”

[英]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-devlibglew-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM