如何在autoconf configure script / makefile中添加指向库的链接

时间:2010-01-13 14:51:28

标签: gcc boost autotools autoconf

我是一个autotools newb 我很难搞清楚如何轻松搞清楚 将特定库链接到其中一个已配置的目标。

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

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

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

这是我的错误信息btw。

2 个答案:

答案 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@