我有一個新的c + +項目建立autoconf,automake和libtool。功能分爲支持庫和用戶二進制文件。還有一組unittests
二進制文件鏈接到這些庫,它們都是在make check
時間構建和運行的,但未安裝。我的lib_LTLIBRARIES庫鏈接,但check_LTLIBRARIES不是?
我說這個項目是新的。實際上,我現在正在考慮提取應該安裝的第一個庫。直到現在,(少量)書面代碼直接編譯到unittests
。
我試圖Makefile.am
片段看起來是這樣的:
lib_LTLIBRARIES += libfoo.la
libfoo_la_SOURCES = foo.cc
在make check
,我得到這個:
/bin/bash ./libtool --tag=CXX --mode=link g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage -g -O0 -fprofile-arcs -ftest-coverage -L/usr/local/lib -Wl,-rpath /usr/local/lib -o libfoo.la -rpath /usr/local/lib foo.lo -lboost_thread-mt -lboost_system-mt -pthread
libtool: link: g++ -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6.1/crtbeginS.o .libs/foo.o -L/usr/local/lib -lboost_thread-mt -lboost_system-mt -L/usr/lib/gcc/x86_64-linux-gnu/4.6.1 -L/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/4.6.1/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu/crtn.o -fprofile-arcs -O0 -fprofile-arcs -Wl,-rpath -pthread -pthread -Wl,-soname -Wl,libfoo.so.0 -o .libs/libfoo.so.0.0.0
/usr/bin/ld: cannot find libfoo.so.0: No such file or directory
collect2: ld returned 1 exit status
通知失蹤庫恰恰是一個我試圖編譯。
(庫不是libfoo
,但是我能夠重現同樣的錯誤與此存根庫。上述Makefile.am
和錯誤行文字和未經編輯。)
如果我改變的automake線
check_LTLIBRARIES += libfoo.la
libfoo_la_SOURCES = foo.cc
然後編譯如下:
/bin/bash ./libtool --tag=CXX --mode=link g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage -g -O0 -fprofile-arcs -ftest-coverage -L/usr/local/lib -Wl,-rpath /usr/local/lib -o libfoo.la foo.lo -lboost_thread-mt -lboost_system-mt -pthread
libtool: link: ar cru .libs/libfoo.a .libs/foo.o
libtool: link: ranlib .libs/libfoo.a
libtool: link: (cd ".libs" && rm -f "libfoo.la" && cp -p "../libfoo.la" "libfoo.la")
..和一切工作正常(除未安裝我的圖書館,在check_
是)
請注意,在命令行唯一的區別是:第二個一些額外的參數:
... -Wl,-rpath在/ usr/local/lib目錄-o libfoo.la -rpath在/ usr/local/lib目錄 foo.lo -lboost_thread-MT ...
我不知道隨便,如果此說法不應該存在,但它似乎是造成問題的原因。有誰知道我錯過了什麼?
更多的細節:
- 在OSX獅子,這工作正常(和命令行是不同的。)在 的Ubuntu 12.04,可能還有其他Linux版本此錯誤表現。
noinst_LTLIBRARIES
和EXTRA_LTLIBRARIES
工作像check_LTLIBRARIES
:沒有額外的參數,它鏈接。看來libtool'便利'庫是專門沒有這些論點的。- automake的1.11.1
- 的autoconf 2.68
- libtool的2.4
EDIT
(手動)滴從參數-Wl,-rpath /usr/local/lib
也解決了這個問題。