开发者

Linker settings

开发者 https://www.devze.com 2023-02-16 02:42 出处:网络
I\'m trying to link boost.python with my application in cmake build-system. The most important parts in my CMakeList.txt:

I'm trying to link boost.python with my application in cmake build-system. The most important parts in my 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)

And, of course, including/linking boost's and python's libraries/headers.

Now this fails with:

/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

I decided to go to the cmake t开发者_开发问答emporary build folder and find generated object file (*.o). I've applied command for it:

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

As a result I got workable MyModule module for python! So, lets look at cmake linker string and find the difference. I ran make with 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 

During excluding some parts of the linker flags I found that my problem is in -Wl,-Bstatic before boosts' libraries list.

I wonder from where that argument came because I noticed Boost_USE_STATIC_LIBS OFF in CMakeList.txt.

What's wrong?


You did not show the code that uses the Boost libraries, so I assume it's just:

target_link_libraries(foo ${Boost_LIBRARIES})

Could you please add

message("XXX ${Boost_LIBRARIES}")

around that point? I suspect that will print a list of libraries with .a extension, which CMake then converts into that -Wl,-Bstatic -lxxx. Examine the path where .a libraries are located and check if there are .so counterparts. My guess is that you actually have only static libraries built.

0

精彩评论

暂无评论...
验证码 换一张
取 消