2011-12-22 49 views
4

我有一個由autotools管理的庫。我在Makefile.am以下線路,以及其他必要的配置如何強制測試程序鏈接到由libtool構建的靜態庫

lib_LTLIBRARIES = libstuff.la 

我的項目還建立了一個程序來運行一些測試套件。該程序被配置如下:

noinst_PROGRAMS = runtests 
runtests_SOURCES = test/stuff.c stuff.h 
runtests_LDADD = libstuff.la 

但是,該程序總是與的libstuff.la動態版本,這某些情況下變得複雜(例如,調試與gdb)。我怎麼能強制該程序鏈接到libstuff.a而不是libstuff.so或等效的動態庫?

+0

調試並不複雜。你只需要記住用'libtool --mode = execute'加前綴。對於gdb這意味着:'libtool --mode =執行gdb runtests'。就那麼簡單。 – 2011-12-22 03:07:37

+0

@jørgensen這似乎是一個很好的解決方案,但沒有在這裏工作。我運行了'libtool --mode = execute gdb runtests'並得到了 'libtool:未知選項字符' - 'in:--mode = execute'。在Mac OS和autotools中使用'i686-apple-darwin10-gcc-4.2.1' 2.61。 – brandizzi 2011-12-22 03:25:56

回答

8

正確的做法是將-static標誌添加到LDFLAGS變量。 所有目標:AM_LDFLAGS = -static

或者專門爲測試程序:runtests_LDFLAGS = -static

+0

好的!這使我的答案不必要。 – Jan 2011-12-22 19:26:54

+0

我試過這個,但它似乎沒有效果 - 我添加了這個,autoreconf,clean和rebuild,但是一切仍然是動態鏈接的。我也嘗試過 - 也是靜態的,但它同樣沒有效果... – 2016-07-25 18:48:52

+0

@ChrisDodd - 你的意思是外部動態庫仍在使用?或者包內的完全自包含的庫?例如例如,如果你依賴外部的'libpng',automake的'-static'選項不會有幫助。 – 2016-07-25 23:08:55

相關問題