19

私はautotoolsの初心者で、特定のライブラリを構成済みのターゲットの1つに簡単にリンクする方法を理解するのに苦労しています。

通常の方法でビルドしたいソースパッケージがあります: ./configure && make && make install

残念ながら、cpp の 1 つに別のライブラリへの参照がありません。手でコンパイル(コマンドラインを調整)するとうまくいきます。しかし、コンパイル スクリプトに「パッチ」を適用したいと思います。リンク参照を編集する標準的な場所はどこですか?

 undefined reference to `boost::system::get_system_category()

それが私のエラーメッセージです。

4

2 に答える 2

20

-l関連するフラグをAM_LDFLAGSinに追加する必要がありMakefile.amます。例えば:

AM_LDFLAGS = -lboost_system-mt

Boost ライブラリは通常、ビルド構成を示す一連の文字であるサフィックスで終わることに注意してください。上記の例では、サフィックスは-mt. これは、インストールによって異なる可能性があります (ただし、-mtバリアントは POSIXy システム、IME で一般的に利用可能です)。

私はこのようなことをします:

AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX)

BOOST_LIB_SUFFIXは貴重な変数 ( を参照AC_ARG_VAR) で、デフォルトは-mtです。

于 2010-01-18T16:33:11.243 に答える
1

ax_cxx_check_lib.m4boost_system には、次のコマンドでチェックできる extern "C" シンボル (マングルされていない名前) がないため、使用しAC_CHECK_LIBます。

http://ac-archive.sourceforge.net/guidod/ax_cxx_check_lib.m4

上記のファイルをダウンロードして名前acinclude.m4を付け、m4プロジェクト ルートのフォルダーに配置します。

configure.ac

AC_LANG_PUSH([C++])

AX_CXX_CHECK_LIB([boost_system-mt],[boost::system::generic_category()],[BOOST_LIB_SUFFIX="-mt"],[BOOST_LIB_SUFFIX=""])

AC_LANG_POP([C++])

AC_SUBST(BOOST_LIB_SUFFIX)

Makefile.am

[artifact_name]_LDFLAGS = -lboost_system@BOOST_LIB_SUFFIX@
于 2013-04-24T18:40:21.527 に答える