2011-03-11 63 views
1

我想鏈接boost.python與我的應用程序在cmake生成系統。 在我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) 

,當然,包括/連接升壓和Python庫/頭。

現在這個失敗:

/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 

我決定去CMake的臨時編譯文件夾,找到產生目標文件(*的.o)。 我已經爲它應用命令:

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

結果我得到了可行的MyModule的模塊蟒蛇!所以,讓我們看看cmake鏈接器字符串並找出差異。我跑做與VERBOSE = 1

/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 

在排除該連接物的標誌,我發現我的問題是在輪候冊,前提升庫列表-Bstatic的某些部分。

我想知道從哪裏來的論點,因爲我注意到CMostList.txt中的Boost_USE_STATIC_LIBS OFF

怎麼了?

回答

0

你沒有看到使用Boost庫的代碼,所以我認爲它只是:

target_link_libraries(foo ${Boost_LIBRARIES}) 

能否請您添加

message("XXX ${Boost_LIBRARIES}") 

圍繞該點?我懷疑這會打印一個擴展名爲.a的庫列表,然後CMake會將其轉換爲-Wl,-Bstatic -lxxx。檢查.a庫所在的路徑,並檢查是否有.so對應項。我的猜測是你實際上只有靜態庫。

+0

我檢查了它。有兩個:a等。 – Ockonal 2011-03-13 09:16:43