ссылка для увеличения регулярного выражения в gcc

StackOverflow https://stackoverflow.com/questions/559179

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

Выдержка из моего оригинального (проблемного) Makefile:БИБЛИОТЕКИ = -static -lboost_файловая система

Решение:БИБЛИОТЕКИ = -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 присутствует для предотвращения статической ссылки на стандартные библиотеки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top