ссылки для повышения регулярных выражений в GCC - PullRequest
6 голосов
/ 18 февраля 2009

Я пытаюсь скомпилировать мою программу, которая использует регулярные выражения в Linux. Я построил библиотеку наддува в ЛИЭС / регулярное выражение / сборки набрав make -fgcc.mak который создал каталог 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

Теперь я хочу использовать регулярные выражения из моей программы, которая находится в произвольном каталоге. Я включил boost / regex.hpp

Я получил сообщение об ошибке, в котором говорится, что regex.hpp не найден. Затем я дал опцию -I в компиляторе g ++. Я не получил эту ошибку. Но я получаю следующую ошибку

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 библиотек с моей программой. Как мне это сделать. Который я должен связать и почему?

Ответы [ 2 ]

9 голосов
/ 18 февраля 2009

Либо добавьте libboost_regex-gcc-1_35.a в список объектных файлов на шаге ссылки, либо добавьте -static -lboost_regex-gcc-1_35 к нему. Также убедитесь, что на шаге компиляции у вас есть переключатель -I, указывающий на каталог включенных расширений. Если библиотеки находятся за пределами обычного пути поиска (/usr/lib на * nix), добавьте этот каталог в команду ссылки с помощью -Wl,-L/path/to/boost/libs для g++ или просто -L/path/to/boost/libs на ld.

0 голосов
/ 27 марта 2010

Я также сталкивался с подобными проблемами при использовании файловой системы boost. Вот что мне нужно было сделать, чтобы статически связать его.

Выдержка из моего оригинального (проблемного) файла Makefile: LIBS = -static -lboost_filesystem

Решение: LIBS = -Wl, -Bstatic -lboost_filesystem -lboost_system -Wl, -Bdynamic

Вы можете просмотреть полный Makefile с http://code.google.com/p/neptuner/source/browse/codebase/trunk/stratego/uboat/Makefile

Необходимо добавить boost_system для правильной ссылки. Прямое добавление / спецификация libboost * .a создавало больше проблем. Обратите внимание, что -Bdynamic присутствует для предотвращения статической связи стандартных библиотек.

...