2012-06-28 109 views
3

我有一個程序aa取決於libbb這取決於libcclibtool automake:LIBADD破壞與靜態鏈接?

在libb的Makefile.am我已經加入

libbb_la_LIBADD = -lcc 

在AA的Makefile我已經加入

aa_LDADD = -lbb 

這工作在默認的情況下精彩。

但我需要靜態鏈接,所以我運行了所有配置--disable-shared
不幸的是編譯aa當我:

libb_source.c:未定義參考libcc_symbol

任何想法缺什麼?

更新:如果您正在交叉編譯並使用stagingdir,請不要考慮指定這樣的依賴關係。

+1

如果'libbb'和'libcc'是使用libtool構建的,那麼'LIBADD'和'LDADD'變量應該列出'libbb.la'而不是'-lbb'。你可能有條件地在'AM_LDFLAGS'變量中添加'-static'。 –

+0

@BrettHale不要在評論中提供答案,我的朋友! :) –

+0

但是,如果我正在交叉編譯和使用臨時目錄,我應該如何指定我的依賴關係? – Waldheinz

回答

1

不要傳遞鏈接標誌。給它的libtool的歸檔文件的名稱,讓automake的工作了:

aa_LDADD = bb/libbb.la 

在你想建立的Windows DLL的情況下,您可能還希望把-no-undefinedlibbb_la_LDFLAGS

+0

如果libbb.la的位置與Makefile.am不相關,但目錄中某處添加了-L到LDFLAGS,該怎麼辦? – arved

+0

是libbb.la實際上是您的項目的一部分,還是一些已安裝的系統庫? –

+0

它是一些已安裝的系統庫。 LIBADD似乎沒有檢查LDFLAGS。我目前看到的唯一解決方案是編寫配置測試,獲取.la文件的絕對路徑。但是這似乎有點冒失。 – arved