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

Gcc 如何在autoconf configure script/makefile中添加指向库的链接,gcc,boost,autotools,autoconf,Gcc,Boost,Autotools,Autoconf,我是自动工具新手 我很难想出如何轻松地 将特定库链接到配置的目标之一 我有一个源程序包,我想以通常的方式构建它: ./configure&&make&&make安装 不幸的是,其中一个CPP缺少对另一个库的引用。 手工编译(调整命令行)很有效。但我宁愿 “补丁”编译脚本。 编辑链接参照的标准位置在哪里 undefined reference to `boost::system::get_system_category() 这是我的错误消息,顺便说一句。您需要将相关的-l标志添加到Makefi

我是自动工具新手 我很难想出如何轻松地 将特定库链接到配置的目标之一

我有一个源程序包,我想以通常的方式构建它: ./configure&&make&&make安装

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

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

这是我的错误消息,顺便说一句。

您需要将相关的
-l
标志添加到
Makefile.AM
中的
AM\LDFLAGS
;e、 g:

AM_LDFLAGS = -lboost_system-mt
请注意,Boost库通常以后缀结尾,即表示构建配置的字母序列。在上面的示例中,后缀是
-mt
。这在您的安装中可能有所不同(尽管POSIXy系统、IME上通常提供
-mt
变体)

我是这样做的:

AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX)

BOOST_LIB_SUFFIX
是一个宝贵的变量(请参见
AC_ARG_VAR
),默认为
-mt
使用
ax_cxx_check_LIB.m4
,因为BOOST_系统没有任何外部的“C”符号(未混合的名称),可以用
AC_check_LIB
进行检查:

下载上面的文件并将其命名为
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@

简洁且非常有用。Thx.@Braden automake从配置脚本本身构建一个
LIBS
变量;在所有情况下,执行此操作可能会导致make命令中同一库的多个链接——这可能会在不同的编译器中产生错误