Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ boost _ Решил использовать boost::regex => получил ошибку

Автор: shasoft 7.12.2012, 20:33

Использовал в проекте boost (boost::geometry), нормально компилировалось и работало.
Понадобились регулярные выражения. Подключил #include <boost/regex.hpp>
Написал в коде

boost::regex *re = new boost::regex("...");

И получил ошибки:
Цитата
./debug\Match.o:Match.cpp:(.text$_ZN5boost9re_detail27cpp_regex_traits_char_layerIcEC2ERKNS0_21cpp_regex_tra
its_baseIcEE[boost::re_detail::cpp_regex_traits_char_layer<char>::cpp_regex_traits_char_layer(boost::re_detail::cpp_regex_traits_base<char> const&)]+0x21): undefined reference to `boost::re_detail::cpp_regex_traits_char_layer<char>::init()'
./debug\Match.o:Match.cpp:(.text$_ZN5boost9re_detail11raw_storage6extendEj[boost::re_detail::raw_storage::ex
tend(unsigned int)]+0x41): undefined reference to `boost::re_detail::raw_storage::resize(unsigned int)'
./debug\Match.o:Match.cpp:(.text$_ZN5boost9re_detail18basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_
traitsIcEEEEE4failENS_15regex_constants10error_typeEiSsi[boost::re_detail::basic_
regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fail(boost::regex_constants::error_type, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)]+0x279): undefined reference to `boost::regex_error::regex_error(std::string const&, boost::regex_constants::error_type, int)'
...

Специалисты могут подсказать решение?

Автор: igor_bogomolov 7.12.2012, 21:21

boost::regex - это собираемая библиотека, просто подключить заголовочный файл не достаточно.
Т.ч. либо доставь соответствующую библиотеку, либо собери её.

Автор: shasoft 7.12.2012, 22:45

В .pro файле прописано:

Цитата
LIBS += -Lm:/Library.Share/boost_1_52_0/mgw44

в папке лежат библиотеки regexp
Цитата
libboost_regex-mgw44-mt-1_52.a
libboost_regex-mgw44-mt-d-1_52.a


Что ещё требуется?

Автор: Litkevich Yuriy 8.12.2012, 0:52

надо наверное сам файл указать.

Автор: Iron Bug 8.12.2012, 10:31

да, в мингве надо явно библиотеки указывать (это же gcc). не могу сказать, как это сделать в Qt, но нужно, чтобы у линковщика была строка -lboost_regex-mgw44-mt-1_52

Автор: shasoft 8.12.2012, 12:09

Ясно. Будем искать. Я то думал, что достаточно просто указать директорию с библиотеками.

Вот правильные строки

Цитата
INCLUDEPATH += $(LIBRARY_SHARE)/boost_1_52_0
LIBS += -L$(LIBRARY_SHARE)/boost_1_52_0/mgw44" -lboost_regex-mgw44-mt-1_52

При подключении не забудьте исправить на свою версию boost-а

Автор: Litkevich Yuriy 8.12.2012, 14:58

если используется только одна библиотека, то можно одной записью сделать

LIBS += -L$(LIBRARY_SHARE)/boost_1_52_0/mgw44/boost_regex-mgw44-mt-1_52

А по отдельности удобно, когда несколько библиотек используется из одного каталога.

Автор: shasoft 8.12.2012, 17:21

Цитата(Litkevich Yuriy @ 8.12.2012, 15:58) *
если используется только одна библиотека, то можно одной записью сделать
LIBS += -L$(LIBRARY_SHARE)/boost_1_52_0/mgw44/boost_regex-mgw44-mt-1_52

А по отдельности удобно, когда несколько библиотек используется из одного каталога.

Ясно. Спасибо. Я вроде пробовал так. Но наверное не "-L", а "-l" указывал.
В любом случае boost я подключил, чтобы потом его использовать. Просто до сих пор хедер-онли использовал.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)