1

在编译链接 boost 和 python 库的共享库时,我收到错误:

/usr/bin/ld: libboost_python.a(from_python.o): 重定位 R_X86_64_32 对 `.rodata.str1.8' 不能在制作共享对象时使用;使用 -fPIC libboost_python.a 重新编译:无法读取符号:值错误

我使用详细模式来查看编译器定义:

/usr/bin/c++ -fPIC -g -shared -Wl,-soname,libCore.so -o .../libCore.so Core.cpp.o -lpython2.7 -Wl,-Bstatic -lboost_python -Wl,-动态

就是这样!我必须-Wl, -Bstatic从定义中删除,但如何做到这一点?我正在使用 cmake 构建系统,这是生成该共享库的代码的一部分:

set(Core_SRC
    Core.cpp
)
add_definitions(-g -fPIC)
add_library(Core SHARED ${Core_SRC})

target_link_libraries(Core
    ${PYTHON_LIBRARIES}
    ${Boost_LIBRARIES}
)
4

1 回答 1

0

问题是您正在尝试使用 libboost_python 构建一个共享库,该库似乎是以无法链接到共享库的方式构建的。

有3种方法可以解决这个问题。

  1. 不要让你的图书馆共享
  2. 构建 boost_python 库的共享版本
  3. 取消对 boost_python 的引用未解决
于 2012-07-17T13:14:01.150 回答