如果你必須在 clang 中使用 `-llibary` 選項

如果你必須在 clang 中使用 `-llibary` 選項

想知道您是否必須使用-llibclang 中的選項。例如:

clang -lasdf foo.c -o foo.o

將連結庫/usr/local/lib/libasdf.dylibfoo.c,但想知道是否有任何方法不必包含它,因此它像其他系統庫一樣工作,您可以在其中執行操作#include <math.h>而不必連結任何內容。

或者也許這就是他們正在談論的這裡:

libSystem 函式庫還包括您通常希望在 libc 和 libm 中找到的函數、RPC 服務和名稱解析器。由於 libSystem 會自動連結到您的應用程式中,因此您無需將其明確新增至編譯器的連結行。為了您的方便,其中許多庫作為 libSystem 的符號連結存在,因此雖然不需要明確連結 -lm (例如),但它不會導致錯誤

答案1

從蘋果 ld 的手冊頁,該-llib選項被傳遞到:

-lx 此選項告訴連結器在庫搜尋路徑中搜尋 libx.dylib 或 libx.a。如果字串 x 的形式為 yo,則在相同位置搜尋該文件,但不會在文件名前面加上「lib」或附加「.a」或「.dylib」。

由此看來,似乎沒有什麼方法可以不使用,-l因為該標誌所做的只是告訴連結器查找庫,然後將其連結到可執行檔中。它不會自動包含,因為它不是您引用的 libSystem 庫的一部分,而 libSystem 庫似乎是 macOS 上唯一自動連結的庫。 /usr/local/lib/ 中的庫(至少在 MacOS 上)不是系統庫,因為它們會自動鏈接,因為 /usr/local/lib 通常用於用戶安裝的庫。

相關內容