2011-03-11 5 views
1

cmake build-system에서 boost.python과 내 응용 프로그램을 연결하려고합니다. 내 CMakeList.txt에서 가장 중요한 부분 : 물론링커 설정

set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 

find_package(Boost COMPONENTS filesystem system date_time python REQUIRED) 

add_definitions(-Wall -g -msse2 -fPIC) 

그리고, 부스트의 파이썬의 라이브러리/헤더 /를 포함한 연결. 내가 cmake 임시 빌드 폴더로 이동 (.o 인 *)를 생성 오브젝트 파일을 찾을하기로 결정

/usr/bin/ld: libboost_python.a(from_python.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC 
libboost_python.a: could not read symbols: Bad value 

:와

지금이 실패합니다. 나는 그것을 명령을 적용했습니다 결과

g++ -shared FILE.cpp.o -L/usr/lib -lboost_python -o MyModule.so 

내가 파이썬에 대한 가능한 인 MyModule 모듈을 가지고! 그래서 cmake 링커 문자열을보고 차이점을 찾으십시오. 내 문제가 -Wl, 부스트 '라이브러리 목록 이전 -Bstatic에 있음을 발견 링커 플래그의 일부 지역을 제외 동안

/usr/bin/c++ -fPIC -g -shared -Wl,-soname,libScript.so -o ../../lib/libScript.so CMakeFiles/LogManagerWrapper.cpp.o -Wl,-Bstatic -lboost_filesystem -lboost_system -lboost_date_time -lboost_python -Wl,-Bdynamic -lpython2.7 

: 나는 VERBOSE = 1로 만들 달렸다.

나는 그 논쟁이 어디서 왔는지 궁금합니다. Boost_USE_STATIC_LIBS OFF CMakeList.txt에 있습니다.

무엇이 잘못 되었나요?

답변

0

당신은 부스트 ​​라이브러리를 사용하는 코드를 보여주지 않았다, 그래서 나는 그냥 가정

target_link_libraries(foo ${Boost_LIBRARIES}) 

당신은 그 점을 중심으로

message("XXX ${Boost_LIBRARIES}") 

를 추가시겠습니까? 나는 그것이 .a 확장자를 갖는 라이브러리 목록을 출력 할 것이라고 생각한다. 그리고 CMake는 그 파일을 -Wl,-Bstatic -lxxx으로 변환한다. .a 라이브러리가있는 경로를 검사하고 .so 대응 파일이 있는지 확인하십시오. 내 생각 엔 실제로 정적 라이브러리 만 구축했다는 것입니다.

+0

나는 그것을 검사했다. 둘 다 있습니다 : a. – Ockonal