0

我有一個Autogen Makefile.am,我試圖用它來構建一個共享庫的測試程序。爲了構建我的測試二進制文件,我想繼續構建共享庫作爲目標,但我希望靜態鏈接測試程序。我花了最近幾個小時試圖製作我的Makefile.am來完成它。建立一個共享庫,但鏈接到一個靜態的

  • 我試着明確改變LDADD線使用的庫。一個版本,並得到沒有發現錯誤,即使我可以看到這個庫得到建立了一個文件。

  • 我嘗試通過LDFLAGS將.libs目錄添加到我的鏈接路徑,但仍無法找到它。

  • 我試着將我的庫源移動到我的測試源列表中,這不起作用,因爲可執行目標文件的構建方式與靜態庫的不同。

  • 我甚至嘗試複製.a版本的lib_LIBRARIES條目(因此同時包含lib_LTLIBRARIES和lib_LIBRARIES)並複製共享版本的所有LDFLAGS,SOURCES,dir和HEADERS作爲靜態版本的一部分(替換形式_a_SOURCES = _la_SOURCES。不過這並不因爲工作的現在想不通建設什麼樣的。

  • 我configure.ac文件是使用默認LT_INIT應該給我都是靜態庫和動態庫,正如我所說的那樣,即使libtool無法看到.a文件,它也正在建立。

請問,任何人都知道如何做到這一點?

+0

'prog_LDFLAGS = -static' –

+0

謝謝!這工作!將LDADD保存爲.la格式的庫(共享),但是在LDFLAGS上強制靜態確實會強制與我的庫進行靜態鏈接!謝謝你,謝謝你,謝謝你! – TimeHorse

+0

.la不一定是共享庫。它實際上是一個文本文件,它包含庫的靜態_and_共享版本的位置以及一些其他信息。 – ptomato

回答

0

正如@Brett Hale在他的評論中提到的,您應該告訴Makefile.am您希望程序靜態鏈接。

要達到此目的,您必須在您的LDFLAGS附加-static
通過更改binary_LDFLAGS(其中binary是要構建的二進制文件的名稱)來實現更改LDFLAGS的特定二進制文件。

所以這樣的事情應該做的伎倆:

binary_LDFLAGS = $(AM_LDFLAGS) -static