我正在嘗試測試C++庫,並且必須比AC_SEARCH_LIBS或AC_CHECK_LIB做得多一點。但是,我的鏈接器對選項的順序很挑剔(g ++ version 5.4.0)。AC_LANG_PROGRAM由於鏈接器選項的順序而失敗鏈接器階段
我configure.ac包含以下代碼:
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([#include <api/BamReader.h>], [BamTools::BamReader dummy])],
[TEST_LIBS=="$TEST_LIBS -lbamtools"] [HAVE_BAMTOOLS=1],
[AC_MSG_WARN([libbamtools is not installed])])
我知道Bamtools被安裝在我的系統。這會產生一個負面結果:
checking api/BamReader.h usability... yes
checking api/BamReader.h presence... no
configure: WARNING: api/BamReader.h: accepted by the compiler, rejected by the preprocessor!
configure: WARNING: api/BamReader.h: proceeding with the compiler's result
checking for api/BamReader.h... yes
configure: WARNING: libbamtools is not installed <-- this line
經過一番調查後,它似乎是鏈接器選項的順序。
的conftest.cpp文件如下所示:
#include <api/BamReader.h>
int main() {
BamTools::BamReader dummy;
return 0;
}
autoconf的宏調用
g++ -o conftest -g -O2 -I/usr/local/include/bamtools -L/usr/local/lib/bamtools -lbamtools conftest.cpp/tmp/ccZiV1J9.o: In function `main':
/home/kzhou/coding/tmp/conftest.cpp:24: undefined reference to `BamTools::BamReader::BamReader()'
/home/kzhou/coding/tmp/conftest.cpp:24: undefined reference to `BamTools::BamReader::~BamReader()'
collect2: error: ld returned 1 exit status
如果喲通過將-lbamtools到底切換順序,則鏈接很高興:
g++ -o conftest -g -O2 -I/usr/local/include/bamtools -L/usr/local/lib/bamtools conftest.cpp -lbamtools
我想知道AC_LANG_PROGRAM是否需要更新?請給出意見。到目前爲止,我還沒有找到解決這個問題的好方法。 請參考:
https://nerdland.net/2009/07/detecting-c-libraries-with-autotools/
正如Diego指出的那樣,LDFLAGS將放在對象或源代碼的前面,LIBS將放在後面。我主要的錯誤是使用這兩個變量。 –