Gcc 如何在autoconf configure script/makefile中添加指向库的链接
我是自动工具新手 我很难想出如何轻松地 将特定库链接到配置的目标之一 我有一个源程序包,我想以通常的方式构建它: ./configure&&make&&make安装 不幸的是,其中一个CPP缺少对另一个库的引用。 手工编译(调整命令行)很有效。但我宁愿 “补丁”编译脚本。 编辑链接参照的标准位置在哪里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
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命令中同一库的多个链接——这可能会在不同的编译器中产生错误