2
我的項目有外部庫依賴關係,我正在使用waf腳本來構建它 - C,C++。WAF - 結合靜態庫
我想建立一個靜態庫,它將靜態鏈接所有相關庫。例如,我使用它來建立動態共享對象:
bld.program(features = 'c cxx cxxshlib'
, target = 'program'
, source = sources
, use = libs_list)
共享對象將具有所有鏈接的依賴庫(具有libs_list
指定)。 但是,靜態庫:
bld.program(features = 'c cxx cxxstlib'
, target = 'program'
, cppflags = '-DSTATIC_LIB'
, source = sources
, use = libs_list)
不會。有沒有辦法解決這個問題?或者我需要在後期構建函數中手動執行此操作?
其實,這樣一來,靜態庫將包含所有遞歸的依賴,因爲這些都是由關鍵字use指定。正如你所看到的,兩個libs_list是相同的(如果我正確理解你的話)。 但是,問題發生在外部庫 - 例如libexpat.a。在我的情況下,libexpat將通過-Lexpat鏈接到共享對象,但不能用於靜態庫。 我想要包括所有這些外部庫。 – Mojo28
@mojo:使用-v來查看發出了哪些命令。如果該命令正常,則可能是由於列表中靜態庫的順序。 – neuro
是的,我用-v但沒有提到libs,只有對象文件。這也許是預料之中的。問題是用ar來合併靜態庫並不容易,默認情況下只使用對象文件。也許這就是爲什麼這是不可能的。我也不確定是否有一個很好的方法來獲取所有依賴靜態庫的列表。我試圖手動運行ar。爲此,我需要所有依賴靜態庫的列表。目前,我正在解析上下文環境以獲取以STLIB_%s開頭的所有變量。我不認爲這是做事最好的方式。 – Mojo28