链接器设置

问题描述:

我想链接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

怎么了?

你没有看到使用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