删除编译器定义
Remove compiler definitions
编译链接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}
)
问题是您正在尝试使用libboost_python构建共享库,该库似乎是以无法链接到共享库的方式构建的。
有 3 种方法可以解决这个问题。
- 不要共享您的库
- 构建boost_python库的共享版本
- 将引用boost_python未解决
相关文章:
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- C++ G++ 编译器 - 错误:隐式声明的定义
- __CHAR_BIT__宏是否为 MSVC 编译器预定义?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 编译器无法识别在类声明之外定义的方法
- C++自定义分配器大小参数作为模板参数会引发编译器错误
- G++ 编译器未为未定义的方法生成错误/警告
- 如果方法在类中定义,则阻止编译器删除方法
- 存储在 C++ 编译器中的标识符的定义(不是声明)在哪里?
- 编译器如何知道C++constexpr计算不会触发未定义的行为
- 如何在cmake工具链文件中设置编译功能,以便已知的自定义编译器使用target_compile_features
- C++ 添加编译器警告,以错误使用自定义打印/日志功能
- Cmake:如何构建自定义编译器二进制文件,然后将其用于某些目标?
- 如何使用自定义编译器和自定义标志构建Qt
- 强制setup.py使用我的自定义编译器
- 如何为Visual Studio编译器指定自定义编译器标志
- 如何添加node-gyp不直接支持的自定义编译器标志?
- c++结构重定义编译器错误
- 如何部分禁用cmake C/C++自定义编译器检查
- 编译器不允许定义编译器生成的构造函数