C++ライブラリをテストしようとしていますが、AC_SEARCH_LIBSまたはAC_CHECK_LIBより少ししか処理する必要がありません。しかし、私のリンカーは、オプションの順序について不安です(g ++バージョン5.4.0)。私はBamtoolsが私のシステムにインストールされていることを知っているリンカーオプションの順番のため、AC_LANG_PROGRAMがリンカーステージに失敗しました
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])])
:
私configure.acは、次のコードが含まれています。これにより、否定的な結果が生成されます。
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
調査の結果、リンカオプションの順に表示されます。ヨーヨーが最後まで-lbamtoolsを置くことによって順序を切り替えた場合の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
を呼び出している
#include <api/BamReader.h>
int main() {
BamTools::BamReader dummy;
return 0;
}
、リンカ:
conftest.cppファイルには、次のようになります。
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は後に置かれます。私の主な間違いは、これら2つの変数の使い方です。 –