2015-06-03 218 views
0

我有一個Makefile.am與兩個noinst_LIBRARIES,其中一個需要與其他鏈接。鏈接靜態庫與靜態庫

將它添加到CFLAGS會引發編譯器警告,但據我所知,automake喜歡在庫中使用LDADD,因爲它們不是完整的程序。

我該怎麼做,假設libb.a需要拉liba.a

+1

你不鏈接靜態庫,它們被添加到你的二進制文件中。 –

+1

我不清楚你到底想要做什麼,但是請注意,你不能將一個靜態庫鏈接到另一個靜態庫。它們只是一個對象文件的集合,靜態庫中沒有任何機制來表明它們依賴於另一個庫。 – nos

+0

@nos true,但是如果存在依賴關係,即如果'liba.a'使用來自'libb.a'的符號,那麼將庫包含在二進制文件中時,必須注意傳遞它們的順序。這意味着循環依賴**不允許**。 –

回答

1

你不能這樣做。其實,你試圖做的事情沒有意義。靜態庫僅僅是包含目標文件和目錄表的檔案。簡而言之,您可以將靜態庫視爲包含.o文件的.zip

鏈接階段只在編譯共享對象或可執行文件時發生。當您的程序與liba.a鏈接時,您還需要指定-static -lb或類似的,就是這樣。

+0

我想我正在考慮將靜態庫「鏈接」爲「在最後一個包含另一個目標文件」。 – 2mac

+1

這與連接非常遙遠:)如果你的意思是將兩個檔案合併到另一個檔案中,沒有通用的方法(因爲靜態庫不是這樣處理的),但你可能會找到特定於平臺的方法。例如,GCC/Clang靜態庫是可以提取,合併和重新打包的'ar'檔案。相反,MSVC爲此提供了一個工具。儘管如此,請注意相互衝突的名稱或符號。 –