2010-12-27 1 views
2
boost::program_options 나는 공식적인 지시에 따라 boost::program_options을 사용하려고합니다. http://www.boost.org/doc/libs/1_36_0/more/getting_started/unix-variants.html#link-your-program-to-a-boost-library

Boost :: program_options (리눅스에서) 빌드하는 법

하지만 작동하지 않습니다.

 
~/download/boost_1_36_0/libs/program_options/example> g++ -o first first.cpp /usr/lib64/libboost_program_options-mt-1_36.a 

/tmp/ccNh69JH.o: In function `main': 
first.cpp:(.text+0xc8): undefined reference to `boost::program_options::options_description::options_description(std::basic_string, std::allocator > const&, unsigned int, unsigned int)' 
/tmp/ccNh69JH.o: In function `std::basic_string, std::allocator > const& boost::program_options::validators::get_single_string(std::vector, std::allocator >, std::allocator, std::allocator > > > const&, bool)':                  
first.cpp:(.text._ZN5boost15program_options10validators17get_single_stringIcEERKSbIT_St11char_traitsIS3_ESaIS3_EERKSt6vectorIS7_SaIS7_EEb[std::basic_string, std::allocator > const& boost::program_options::validators::get_single_string(std::vector, std::allocator >, std::allocator, std::allocator > > > const&, bool)]+0x142): undefined reference to `boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)' 
first.cpp:(.text._ZN5boost15program_options10validators17get_single_stringIcEERKSbIT_St11char_traitsIS3_ESaIS3_EERKSt6vectorIS7_SaIS7_EEb[std::basic_string, std::allocator > const& boost::program_options::validators::get_single_string(std::vector, std::allocator >, std::allocator, std::allocator > > > const&, bool)]+0x2e9): undefined reference to `boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)' 
collect2: ld returned 1 exit status 

이 작업은 이상하지만 :

g++ -o first first.cpp /usr/lib64/libboost_program_options.so.1.42.0 
+2

귀하의 링크 부스트 1.45입니다하지만 코드는 오히려 고대 부스트 1.36을 사용하고있는 것으로 나타납니다. 차이점은 무엇입니까? –

+0

@Sam : 변경됨, 차이 없음 –

+0

두 번째 예가 'weirdie'무엇입니까? –

답변

2

당신이 라이브러리를 컴파일 된 헤더를 포함하고 올바르게에 대한 참조를 추가 한 가정, 나는 당신이 일을 해결하기 위해 빠른 (게으른) 방법을 제안 할 수 있습니다 전자 문제. 당신은 프로젝트에 소스 파일을 추가하고

을 솔루션을 작업하는 동안 함께 컴파일 할 수 있습니다 나는 다음과 같은 내용으로 boost.pc 파일을 만든
1

:

prefix=/usr/local/boost 
exec_prefix=${prefix} 
libdir=${exec_prefix}/lib 
includedir=${prefix}/include 

Name: boost 
Description: my boost pc file 
Version: 1.57.0 
Cflags: -I${includedir} 
Libs: -L${libdir} -lboost_system -lboost_program_options 

는 지금은

뭔가를 실행할 수 있습니다
g++ -g -O2 `pkg-config ./boost.pc --cflags --libs` -w -c main-new.cpp -o obj/main.o 
g++ -g -O2 -w obj/main.o -o bin/main `pkg-config ./boost.pc --cflags --libs` 

은 (메이크를 통해)