我有一個Makefile.am
與兩個noinst_LIBRARIES
,其中一個需要與其他鏈接。鏈接靜態庫與靜態庫
將它添加到CFLAGS
會引發編譯器警告,但據我所知,automake喜歡在庫中使用LDADD
,因爲它們不是完整的程序。
我該怎麼做,假設libb.a
需要拉liba.a
?
我有一個Makefile.am
與兩個noinst_LIBRARIES
,其中一個需要與其他鏈接。鏈接靜態庫與靜態庫
將它添加到CFLAGS
會引發編譯器警告,但據我所知,automake喜歡在庫中使用LDADD
,因爲它們不是完整的程序。
我該怎麼做,假設libb.a
需要拉liba.a
?
你不能這樣做。其實,你試圖做的事情沒有意義。靜態庫僅僅是包含目標文件和目錄表的檔案。簡而言之,您可以將靜態庫視爲包含.o
文件的.zip
。
鏈接階段只在編譯共享對象或可執行文件時發生。當您的程序與liba.a
鏈接時,您還需要指定-static -lb
或類似的,就是這樣。
我想我正在考慮將靜態庫「鏈接」爲「在最後一個包含另一個目標文件」。 – 2mac
這與連接非常遙遠:)如果你的意思是將兩個檔案合併到另一個檔案中,沒有通用的方法(因爲靜態庫不是這樣處理的),但你可能會找到特定於平臺的方法。例如,GCC/Clang靜態庫是可以提取,合併和重新打包的'ar'檔案。相反,MSVC爲此提供了一個工具。儘管如此,請注意相互衝突的名稱或符號。 –
你不鏈接靜態庫,它們被添加到你的二進制文件中。 –
我不清楚你到底想要做什麼,但是請注意,你不能將一個靜態庫鏈接到另一個靜態庫。它們只是一個對象文件的集合,靜態庫中沒有任何機制來表明它們依賴於另一個庫。 – nos
@nos true,但是如果存在依賴關係,即如果'liba.a'使用來自'libb.a'的符號,那麼將庫包含在二進制文件中時,必須注意傳遞它們的順序。這意味着循環依賴**不允許**。 –