crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Решил использовать boost::regex => получил ошибку
shasoft
  опции профиля:
сообщение 7.12.2012, 20:33
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 3.10.2012
Пользователь №: 3545

Спасибо сказали: 0 раз(а)




Репутация:   0  


Использовал в проекте 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
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


boost::regex - это собираемая библиотека, просто подключить заголовочный файл не достаточно.
Т.ч. либо доставь соответствующую библиотеку, либо собери её.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
shasoft
  опции профиля:
сообщение 7.12.2012, 22:45
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 3.10.2012
Пользователь №: 3545

Спасибо сказали: 0 раз(а)




Репутация:   0  


В .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
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


надо наверное сам файл указать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 8.12.2012, 10:31
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


да, в мингве надо явно библиотеки указывать (это же gcc). не могу сказать, как это сделать в Qt, но нужно, чтобы у линковщика была строка -lboost_regex-mgw44-mt-1_52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
shasoft
  опции профиля:
сообщение 8.12.2012, 12:09
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 3.10.2012
Пользователь №: 3545

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

Вот правильные строки
Цитата
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
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


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

А по отдельности удобно, когда несколько библиотек используется из одного каталога.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
shasoft
  опции профиля:
сообщение 8.12.2012, 17:21
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 3.10.2012
Пользователь №: 3545

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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 я подключил, чтобы потом его использовать. Просто до сих пор хедер-онли использовал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 4:26