Ссылки для повышения регулярных выражений в GCC

Я пытаюсь скомпилировать мою программу, которая использует регулярные выражения в Linux. Я собрал библиотеку boost в libs/regex/build, набрав 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 ответа

Решение

Либо добавить 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,

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

Другие вопросы по тегам