0

我正在尝试使用 autotools 编译一些代码,并且在尝试包含 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.

和./配置:

$ 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。这里可能是什么问题?

提前非常感谢。

4

2 回答 2

0

GNU Autoconf 存档中有boost::date-timeboost::regex的宏。也许他们会更合适。

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

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

于 2013-06-21T18:31:26.207 回答
0

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

  • AC_CONFIG_MACRO_DIR([m4])configure.ac

  • ACLOCAL_AMFLAGS = -I m4 --install在顶层Makefile.am

  • 调用aclocal_aclocal -I m4 --install

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 这样的依赖项。

于 2013-06-21T18:59:07.033 回答