7

我正在尝试编译我在 linux 上使用正则表达式的程序。我通过键入 make -fgcc.mak 在 libs/regex/build 中构建了 boost 库,它创建了一个包含以下四个文件的目录 gcc

boost_regex-gcc-1_35
boost_regex-gcc-d-1_35
libboost_regex-gcc-1_35.a
libboost_regex-gcc-d-1_35.a

现在我想使用我的程序中的正则表达式,它位于某个任意目录中。我#included boost/regex.hpp

我收到错误消息,指出找不到 regex.hpp。然后我在 g++ 编译器中给出了 -I 选项。我没有得到那个错误。但我收到以下错误

undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'

我用谷歌搜索,发现我需要以某种方式将上述 4 个库之一链接到我的程序。我该怎么做。我应该链接哪一个,为什么?

4

2 回答 2

10

libboost_regex-gcc-1_35.a在链接步骤中添加到目标文件列表或添加到相同的列表中-static -lboost_regex-gcc-1_35。还要确保-I在编译步骤中有一个指向 boost 包含目录的开关。如果库位于典型搜索路径之外(/usr/lib在 *nix 上),请将该目录添加到您的链接命令中,使用-Wl,-L/path/to/boost/libsforg++或简单地-L/path/to/boost/libson ld

于 2009-02-17T23:27:41.117 回答
0

在使用 boost 文件系统时,我也遇到了类似的问题。这是我需要做的让它静态链接。

摘自我的原始(有问题的)Makefile:LIBS = -static -lboost_filesystem

解决方案:LIBS = -Wl,-Bstatic -lboost_filesystem -lboost_system -Wl,-Bdynamic

您可以从http://code.google.com/p/neptuner/source/browse/codebase/trunk/stratego/uboat/Makefile查看完整的 Makefile

需要添加 boost_system 以使其正确链接。直接添加/指定 libboost*.a 会产生更多问题。注意 -Bdynamic 的存在是为了防止标准库的静态链接。

于 2010-03-27T14:10:42.777 回答