2009-07-09 5 views
7

나는 Boost Getting Started 문서를 따라 가고 있습니다. Bjam과 함께 설치했고 include 파일과 라이브러리 파일 (.a, .so)을 볼 수있었습니다.Linux에서 Boost 라이브러리 설치 및 빌드

/tmp/ccJFVVid.o: In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)': 
    test_boost2.cc:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)]+0x22): undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)' 
    collect2: ld returned 1 exit status 

그것은 내 Windows 시스템에서 괜찮 일하는 :이 명령

g++ -I./boost/include -L./boost/lib -lboost_regex-gcc43-mt -static -o test_boost2 test_boost2.cc 

를 사용하여 코드 위에 구축 할 경우

#include <boost/regex.hpp> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string line; 
    boost::regex pat("^Subject: (Re: |Aw:)*(.*)"); 
} 

나는이 오류가 발생합니다.

무엇이 잘못 되었나요?

버전의 gcc 4.3.2 (데비안 4.3.2-1.1)

리눅스 XXXXXXXX 2.6.26-1-686 # 1 SMP (금) 3월 13일 세계 협정시 18시 08분 45초 2009는 i686 GNU/리눅스

답변

8

문제점을 발견했습니다. g ++ 명령 문제! :(죄송합니다. -l 옵션을 줄 끝으로 이동하면 더 이상 불평하지 않습니다.

17
sudo apt-get install libboost-regex-dev 

더 지능적인 시스템이 더 잘할 수있는 곳에서 설치를 신경 쓰지 마십시오.

apt-cache search libboost | grep -- -dev 

Dislaimer :

그냥 가능한 패키지 이름 목록 (부스트의 많은 부분)을 얻으려면

g++ -lboost_regex boost.cpp -o boost 

를 사용하여 컴파일하려면 나는 그 이후 여러분이 데비안을 사용하는 가정 무엇을 당신을 GCC 버전보고.

+0

작동합니다! 하지만 Boost (1.39)의 최신 버전을 설치하려면 어떻게해야합니까? 내가 정말로 사용하고 싶은 것은 Boost.Asio 라이브러리입니다. :) –

+0

lenny를 사용하는 경우 'libboost1.35-dev'를 사용할 수 있습니다. 'squeeze'를 사용하는 경우 'libboost1.38-dev'가 있습니다. 독립 실행 형 버전의 asio 인 'libasio-dev'도 있습니다. lenny의 버전은 상당히 오래된 버전입니다. –

+0

링크 된 라이브러리는 컴파일의 끝에 있어야합니까? 따라서 : g ++ boost.cpp -o boost -lboost_regex – user289882

2

귀하의

-L./boost/lib 

은 용의자를 보인다. Boost를 빌드하면 라이브러리가 stage/lib 디렉토리에 놓입니다. 또한 기본 빌드 프로세스는 정적 라이브러리를 만들지 않으므로 -static을 명령 줄에서 제거하는 것이 좋습니다. 그래도 문제가 해결되지 않으면 my blog의 단계를 수행하여 문제를 해결하는 것이 좋습니다.

+0

별도로 정규식을 컴파일하고 그 결과를 사용하면 동일한 오류가 발생합니다. g ++ -I./boost_1_39_0 ./boost_1_39_0/libs/regex/build/gcc/libboost_regex-gcc-1_38.a -o test_boost2 test_boost2.cc –

+0

g ++ -I./boost_1_39_0 -o test_boost2 test_boost2.cc ./boost_1_39_0/ libs/regex/build/gcc/libboost_regex-gcc-1_38.a ^이 작품은 !!!!!! –

+1

정적 라이브러리의 경우 링커의 명령 행에서 지정하는 위치가 중요하기 때문입니다. 다시 한 번 블로그 게시물을 참조하십시오. –

관련 문제