【问题标题】:Autoreconf better way to find Boost::Date-timeAutoreconf 找到 Boost::Date-time 的更好方法
【发布时间】:2013-06-18 21:56:40
【问题描述】:

我正在尝试使用自动工具编译一些代码,但在尝试包含 boost::date-time 和 boost::regex 时遇到了问题。我得到了一个 configure.in 文件,该文件定义了以这种方式查找 boost::date-time

AC_CHECK_LIB(boost_date_time-gcc-mt, main, , [
        AC_CHECK_LIB(boost_date_time-mt, main, , [
                AC_CHECK_LIB(boost_date_time, main, , [
                        AC_MSG_ERROR("Linking against boost::date-time library failed.")])
        ])
])

这似乎是谷歌的标准方式。但是当我运行 autoreconf 时:

$ autoreconf -f -s -i
libtoolize: putting auxiliary files in `.'.
libtoolize: linking file `./ltmain.sh'
libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.

和./configure:

$ CXXFLAGS="-g -w" ./configure --prefix=$INSTALL_PATH
...
checking for main in -lboost_date_time-gcc-mt... no
checking for main in -lboost_date_time-mt... no
checking for main in -lboost_date_time... no
configure: error: "Linking against boost::date-time library failed."

找不到。我知道他们在那里,因为我从头开始编译了 boost 1.53。这可能是什么问题?

非常感谢。

【问题讨论】:

    标签: boost autotools autoconf


    【解决方案1】:

    有一个出色的 boost.m4 宏。您可以将其复制到顶级./m4 目录中。

    • AC_CONFIG_MACRO_DIR([m4]) in configure.ac

    • 顶级ACLOCAL_AMFLAGS = -I m4 --installMakefile.am

    • aclocal -I m4 --install调用aclocal

    使用configure.ac 中的结果非常容易,例如,对于 Boost.Filesystem:

    BOOST_REQUIRE([1.53], [ACTION-IF-NOT-FOUND])
    AC_SUBST(BOOST_CPPFLAGS)
    MY_PROJECT_CPPFLAGS+="$BOOST_CPPFLAGS"
    
    BOOST_FILESYSTEM([mt])
    AC_SUBST(BOOST_FILESYSTEM_LIBS)
    AC_SUBST(BOOST_FILESYSTEM_LDFLAGS)
    MY_PROJECT_LIBFLAGS+="$BOOST_FILESYSTEM_LDFLAGS $BOOST_FILESYSTEM_LIBS"
    

    它甚至会添加像 Boost.System 这样的依赖项。

    【讨论】:

    • 非常感谢您的参考。我可以使用 configure.in 中的标志,但是一旦我尝试调用 --with-boost=/path/to/boost 它就找不到提升,我不知道为什么。有什么建议吗?
    • @madtowneast - 我用 MacPorts 构建了 boost-1.53​​,它将boost 目录放在:/opt/local/include 下……这对我来说就是这样。共享库位于/opt/local/lib
    【解决方案2】:

    GNU Autoconf Archive 处有用于 boost::date-timeboost::regex 的宏。也许他们会更合适。

    找不到。我知道他们在那里,因为我从头开始编译了 boost 1.53。这可能是什么问题?

    您必须咨询config.log 才能确定这一点。由于您正在这些库中寻找 main 函数(不在这些库中,但这是另一个问题),AC_CHECK_LIB 测试会生成 invalid C++ code,这可能是您的问题。

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 2023-03-09
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 2014-09-30
      • 1970-01-01
      相关资源
      最近更新 更多