我是一个autotools newb 我很难搞清楚如何轻松搞清楚 将特定库链接到其中一个已配置的目标。
我有一个源代码包,我想以通常的方式构建: ./configure&&制造&& make install
不幸的是,其中一个cpps缺少对另一个库的引用。 手动编译(调整命令行)有效。但我宁愿 “补丁”编译脚本。 编辑链接参考的标准位置在哪里?
undefined reference to `boost::system::get_system_category()
这是我的错误信息btw。
答案 0 :(得分:18)
您需要在-l
中向AM_LDFLAGS
添加相关的Makefile.am
标记; e.g:
AM_LDFLAGS = -lboost_system-mt
请注意,Boost库通常以后缀结尾 - 一系列字母表示构建配置。在上面的示例中,后缀为-mt
。这可能在您的安装中有所不同(尽管-mt
变体通常可用于POSIXy系统,IME)。
我这样做:
AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX)
BOOST_LIB_SUFFIX
是一个宝贵的变量(请参阅AC_ARG_VAR
),默认为-mt
。
答案 1 :(得分:1)
使用ax_cxx_check_lib.m4
因为boost_system没有可以使用AC_CHECK_LIB
检查的任何外部“C”符号(未编号的名称):
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@