【问题标题】:Remove compiler definitions删除编译器定义
【发布时间】:2012-07-16 09:19:01
【问题描述】:

在编译链接 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,-B动态

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

【问题讨论】:

    标签: c++ cmake shared-libraries


    【解决方案1】:

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

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

    1. 不要共享您的库
    2. 构建 boost_python 库的共享版本
    3. 没有解决对 boost_python 的引用

    【讨论】:

    • 1. Boost python模块不能是非共享库吗? 2. 我无法构建它,因为我对此有限制 3. 抱歉,无法理解
    • This: "recompile with -fPIC libboost_python.a" 告诉你你需要做什么。如果你不能重建 libbost_python.a,那么你的库就不能被共享。据推测,由于某种原因,您的构建系统设置为强制使用 -Wl,-BStatic。如果没有,您应该与构建系统的维护人员谈谈,看看他们是否可以解释原因
    猜你喜欢
    • 2012-07-30
    • 2013-10-15
    • 2014-10-04
    • 2013-09-21
    • 2021-03-13
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多