LINUX.ORG.RU

c++ и boost


0

2

Здравствуйте!

Возникла необходимость использовать регулярные выражения в c++ программе, как я понял изходя из поиска google в c++ нет стандартных методов для работы с regex, но есть библиотека boost решил заюзать ее но возникла проблема.

Загрузил и установил boost
[CODE]
# svn co http://svn.boost.org/svn/boost/trunk boost-trunk
# cd boost-trunk
# ./bootstrap.sh
# ./bjam install --prefix=/usr/local/boost
[/CODE]

boost установился в /usr/local/boost там две папки include и lib

создал файл для теста
[CODE]
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>

using namespace boost;

regex expression("([0-9]+)(\\-| |$)(.*)");

int main()
{
return 0;
}
[/CODE]
компилю
[CODE]
# g++ t.c -I/usr/local/boost/include
[/CODE]

получаю кучу ошибок
[CODE]
/var/tmp//ccNJhz80.o(.gnu.linkonce.t._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j+0x22): In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':
: undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
[/CODE]

Помогите решить проблему!


Помимо ключа -I дополнительно нужно указать, с какой библиотекой линковаться, это делается посредством чего-то вроде -lboost_regex (скоро придут добрые люди, и подскажут ключик точно). Кстати, а зачем нужно собирать boost вручную, если в абсолютном боьшинстве дистрибутивов он имеется в репозитории?

Kirakishou
()
Ответ на: комментарий от Kirakishou

я не знал что он есть в репозитории, понял, подождем добрых людей!

maxfax
() автор топика

там вроде так должно быть -lboost_regex и конечно если ты пишешь на С++, то нах там stdlib.h ? и если тебе нужно регексы, то лучше уж так. using boost::regex, а вообще я так писал бы

#include <boost/regex.hpp>

boost::regex expression("([0-9]+)(\\-| |$)(.*)"); 

int main(int argc, char* argv[])
{
	return 0;
}

Boy_from_Jungle ★★★★
()

Загрузил и установил boost

Не верю что в дистрибутиве нет буста.

Помогите решить проблему!

find_package(Boost COMPONENTS regex)
include_directories(${Boost_INCLUDE_DIRS})
...
target_link_libraries(myprogram ${Boost_LIBRARIES})
elverion
()
Ответ на: комментарий от elverion

find_package(Boost COMPONENTS regex) include_directories(${Boost_INCLUDE_DIRS}) ... target_link_libraries(myprogram ${Boost_LIBRARIES})

Интересно ТС распарсил, что ты имел ввиду.)))

anonymous
()
Ответ на: комментарий от maxfax

> нет не распарил.

Ну вот ты и дождался «добрых людей»))) Но этот конкретный экземпляр не лчень добрый. Он привел тебе лишь часть маке файла)))

Забей в гугл одну из строчек например эту «include_directories(${Boost_INCLUDE_DIRS})». Уже получишь инфу к размышлению, я бы развил тему, но сорри давно в этом не ковырялся.

anonymous
()

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

one_more_hokum ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.