【发布时间】:2011-03-11 18:40:44
【问题描述】:
我正在尝试将 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)
当然,包括/链接 boost 和 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
因此,我得到了适用于 python 的可行 MyModule 模块!所以,让我们看看 cmake 链接器字符串并找出不同之处。我使用 VERBOSE=1 运行 make:
/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
在排除链接器标志的某些部分时,我发现我的问题出在 -Wl,-Bstatic 中,在 boosts 的库列表之前。
我想知道这个论点是从哪里来的,因为我注意到 CMakeList.txt 中的 Boost_USE_STATIC_LIBS OFF。
怎么了?
【问题讨论】:
标签: c++ python boost linker cmake