簡體   English   中英

如何強制靜態庫包含它的依賴項?

[英]How to force static library to include it dependencies?

我像這樣用 gcc 和 ar 構建了我自己的靜態庫。

g++ \
    ... list of library sources ... \
    ... a lot of -L -l -I -D options etc... \
    -c \
    && ar crf ./lib/libpackager.a *.o

然后我在我的應用程序中使用這個庫。 目前我是這樣構建的。

g++ \
    myApp.cpp \
    ... same -L -l -I options as in library ... \
    -L. -lpackager \
    -o myApp

它有效,但對我來說有點奇怪,我需要在構建應用程序期間復制所有-l-L 是否可以在庫中包含所有這些庫依賴項。 我的目標是構建這樣的應用程序。

g++ myApp.cpp -L. -lpackager -o myApp

將評論轉換為答案。

在編譯為目標文件時指定-l-L操作是無關緊要的。 某些版本的 GCC 會警告不會使用的參數,因為它們是鏈接時參數,並且當您包含-c標志時將不會使用鏈接。

ar命令不知道如何處理 C 編譯器的-l-L參數(它可能有自己的標志用途;一個版本的ar接受但忽略-l )。

因此,在鏈接靜態庫時必須指定依賴項。 這就是自 70 年代初以來的生活方式——這一方面尚未改變。 可以使用依賴信息構建共享庫,但不能使用靜態庫。

據我了解,我需要構建一個共享庫並以靜態方式鏈接它,對嗎?

不可以。您要么需要將共享庫構建並鏈接為共享庫,要么您需要接受使用靜態庫意味着您在使用該庫時需要在命令行中指定其他庫。 有系統可以幫助管理此類信息; pkg-config就是其中之一。 AFAIK,您不能以“靜態方式”鏈接共享庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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