我在Ubuntu上使用boost 1.45.0,Code :: Blocks作为我的IDE,我无法编译basic_regex.hpp。我很确定我正确设置了boost,因为我可以使用boost :: format编译程序而不会出现任何错误。但我得到了这个恼人的错误,我不知道如何摆脱它。
引发错误的代码:
boost::regex e("\"http:\\\\/\\\\/localhostr.com\\\\/files\\\\/.+?\"");
编译器输出(GCC):
obj/Debug/main.o
In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)'
/home/neal/Documents/boost_1_45_0/boost/regex/v4/basic_regex.hpp|379|
undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'|
||=== Build finished: 1 errors, 0 warnings ===|
我在设置提升时是否错过了一个步骤,还是应该降级到另一个版本的提升?
答案 0 :(得分:13)
这看起来像链接器错误。 boost :: regex不是一个只有头的库,所以你需要将-lboost_regex
和正确的-L/path/to/boost/lib
传递给链接器。
答案 1 :(得分:9)
Boost :: Regex有一些代码存在于一个单独的库中(libboost_regex.so)。要链接它,请将-lboost_regex
添加到您正在使用的GCC命令行中。
根据您的安装,可能是libboost_regex-mt.so。在这种情况下,您需要在命令行上使用-lboost_regex-mt
。 (MT代表mutlithreaded。)
答案 2 :(得分:2)
这是一个链接错误而不是编译器错误。您需要明确链接Boost的正则表达式库。
g++ program.cpp -lboost_regex -L/path/to/boost/lib