2013-02-07 2 views
1

저는 C++을 처음 접했고 Boost 라이브러리를 사용하여 정규 표현식을 배우려고했습니다. 나는 다음의 간단한 코드를 시도하고있다.부스트 정규 표현식으로 빌드하지 못했습니다.

#include <cstdlib> 
#include <iostream> 
#include <cstring> 
#include <boost/regex.hpp> 

using namespace std; 
using namespace boost; 

/* 
* 
*/ 
int main() 
{ 
    const regex expression("How to re"); 

    string string1 = "How to re"; 

    bool match=regex_match(string1,expression); 

    if (match){ 
     cout<<"Yes"<<endl; 
    } 

    return 0; 
} 

문제는 터미널에서 파일을 실행하려고하면 큰 오류가 발생한다는 것입니다. 플래그 오류는 다음

Undefined symbols: 
    "boost::re_detail::get_mem_block()", referenced from: 
     boost::re_detail::save_state_init::save_state_init(boost::re_detail::saved_state**, boost::re_detail::saved_state**)in ccqa7fIw.o 
     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> > >::extend_stack()in ccqa7fIw.o 
    "boost::match_results<__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> > > > > >::maybe_assign(boost::match_results<__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> > > > > > const&)", referenced from: 
     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> > >::match_match()in ccqa7fIw.o 
    "boost::re_detail::get_default_error_string(boost::regex_constants::error_type)", referenced from: 
     boost::re_detail::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) constin ccqa7fIw.o 
     boost::re_detail::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) constin ccqa7fIw.o 
    "boost::re_detail::put_mem_block(void*)", referenced from: 
     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> > >::unwind_extra_block(bool)in ccqa7fIw.o 
     boost::re_detail::save_state_init::~save_state_init()in ccqa7fIw.o 
    "boost::re_detail::raise_runtime_error(std::runtime_error const&)", referenced from: 
     void boost::re_detail::raise_error<boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > >(boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::error_type)in ccqa7fIw.o 
    "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)", referenced from: 
     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> > >::perl_matcher(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__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::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)in ccqa7fIw.o 
    "boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const", referenced from: 
     boost::cpp_regex_traits<char>::transform_primary(char const*, char const*) constin ccqa7fIw.o 
    "boost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const", referenced from: 
     boost::cpp_regex_traits<char>::transform(char const*, char const*) constin ccqa7fIw.o 
    "boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)", referenced from: 
     boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)in ccqa7fIw.o 
    "boost::re_detail::verify_options(unsigned int, boost::regex_constants::_match_flags)", referenced from: 
     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> > >::find_imp()in ccqa7fIw.o 
    "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> > >::find()", referenced from: 
     bool boost::regex_search<__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> > > > >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__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::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)in ccqa7fIw.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

정말 여기에서 무슨 일이 일어나고 있는지 이해할 수 없다; 나는 또한 다른 스레드에서 정규식 코드 예제를 찾고 있었지만 어떤 해결책도 찾을 수 없었다. 저를 도와주세요? 감사!

+0

이러한 오류는 런타임 오류가 아니며 링커 오류입니다. 애플리케이션을 어떻게 구축 (특히 링크)합니까? 적절한 라이브러리와 링크되어 있습니까? –

+0

C++ -I $ PATH/boost_1_52_0 filename.cpp -o filename – user1718064

답변

3

부스트 정규 표현식 라이브러리와 함께 링크가 없습니다. 헤더가 아니라 라이브러리와 링크해야합니다.

당신은 사용자 정의 내장 된 부스트를 사용하는 것으로,뿐만 아니라 라이브러리의 경로를 설정해야

$ c++ -I $PATH/boost_1_52_0 filename.cpp -o filename -L$PATH/to/libraries -lboost_regex 

을보십시오.

+0

두 가지 질문 : 1- 어떻게 라이브러리 경로를 설정합니까? 3-By $ PATH/to/libraries는 boost_regex.hpp가 저장된 폴더를 의미합니까? – user1718064

+0

@ user1718064 경로는'-L' 인수로 설정되며'libboost_regex. *'파일의 경로입니다. –