删除编译器定义

时间:2012-07-17 12:45:09

标签: c++ cmake shared-libraries

在编译链接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,-Bdynamic

就是这样!我必须从定义中删除-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}
)

1 个答案:

答案 0 :(得分:0)

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

有三种方法。

  1. 不要让您的图书馆共享
  2. 构建boost_python库的共享版本
  3. 提到对boost_python未解决的引用