【问题标题】:Howto add a link to a library in autoconf configure script / makefile如何在 autoconf 配置脚本/makefile 中添加指向库的链接
【发布时间】:2011-01-04 16:11:55
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: gcc boost autotools autoconf


    【解决方案1】:

    您需要在Makefile.am中将相关的-l标志添加到AM_LDFLAGS;例如:

    AM_LDFLAGS = -lboost_system-mt
    

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

    我会这样做:

    AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX)
    

    BOOST_LIB_SUFFIX 是一个宝贵的变量(参见AC_ARG_VAR),默认为-mt

    【讨论】:

    • 简洁且很有帮助。谢谢。
    • @Braden automake 从配置脚本本身构建一个LIBS 变量;在所有情况下都遵循这一点可能会导致 make 命令中同一库的多个链接——这可能会在不同的编译器中产生错误
    【解决方案2】:

    使用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@
    

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 2014-10-18
      • 1970-01-01
      • 2011-07-14
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      相关资源
      最近更新 更多