我正在尝试使用自动工具编译一些代码,但在尝试包含boost::date-time和boost::regex时遇到了问题。我得到了一个定义boost::date-time的configure.in文件,如下所示
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。这里会有什么问题呢?
在此之前非常感谢。
发布于 2013-06-22 02:31:26
在GNU Autoconf Archive中有用于boost::date-time和boost::regex的宏。也许他们会更合适。
找不到它。我知道它们在那里,因为我从头开始编译了boost 1.53。这里会有什么问题呢?
你必须咨询config.log才能确定这一点。由于您要在这些库中查找main函数(这些库不在这些库中,但这是另一个问题),AC_CHECK_LIB测试将生成invalid C++ code,这可能就是您的问题所在。
发布于 2013-06-22 02:59:07
有一个很棒的boost.m4宏。您可以将其复制到顶级./m4目录中。
使用aclocal -I m4 --install的顶级Makefile.am
ACLOCAL_AMFLAGS = -I m4 --install中的AC_CONFIG_MACRO_DIR([m4]) in configure.ac 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这样的依赖项。
https://stackoverflow.com/questions/17240822
复制相似问题