19

我是一个 autotools 新手,我很难弄清楚如何轻松地将特定库链接到配置的目标之一。

我有一个源代码包,我想以通常的方式构建:./configure && make && make install

不幸的是,其中一个 cpp 缺少对另一个库的引用。手动编译(调整命令行)是可行的。但我宁愿“修补”编译脚本。编辑链接引用的标准位置在哪里?

 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.m4是因为 boost_system 没有任何可以检查的外部“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 回答