регулярное выражение Boost не скомпилируется - PullRequest
6 голосов
/ 24 декабря 2010

Я использую boost 1.45.0 в Ubuntu с 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 ===|

Я пропустил шаг при настройке буста или я должен понизить версию до буста?

Ответы [ 3 ]

13 голосов
/ 24 декабря 2010

Это похоже на ошибку компоновщика.boost :: regex - не только библиотека заголовков, поэтому вам нужно передать -lboost_regex с правильным -L/path/to/boost/lib компоновщику.

9 голосов
/ 24 декабря 2010

Boost :: Regex содержит некоторый код, который находится в отдельной библиотеке (libboost_regex.so). Чтобы связать это, добавьте -lboost_regex к используемой командной строке GCC.

В зависимости от вашей установки это может быть libboost_regex-mt.so. В этом случае вам нужно будет использовать -lboost_regex-mt в командной строке. (MT означает многопоточность.)

2 голосов
/ 24 декабря 2010

Это ошибка компоновки, а не ошибка компилятора.Вам нужно явно связать библиотеку регулярных выражений Boost.

g++ program.cpp -lboost_regex -L/path/to/boost/lib
...