我是一个 autotools 新手,我很难弄清楚如何轻松地将特定库链接到配置的目标之一。
我有一个源代码包,我想以通常的方式构建:./configure && make && make install
不幸的是,其中一个 cpp 缺少对另一个库的引用。手动编译(调整命令行)是可行的。但我宁愿“修补”编译脚本。编辑链接引用的标准位置在哪里?
undefined reference to `boost::system::get_system_category()
这是我的错误信息。
您需要将相关-l
标志添加到AM_LDFLAGS
in 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
.
使用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@