制作共享对象时不能使用;使用-fPIC

时间:2017-01-07 22:59:41

标签: linux cmake shared-libraries

我尝试安装库但运行make后出现以下错误。如何用flag重新编译?

  

制作目标pwrutils的扫描依赖关系链接CXX共享   library libpwrutils.so / usr / bin / ld:   /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_system.a(error_code.o):   对于`.rodata.str1.1'重定位R_X86_64_32时不能使用   制作共享对象;用-fPIC重新编译   ,/ usr / lib中/ GCC / x86_64的-Linux的GNU / 4.8 /../../../ x86_64的-Linux的GNU / libboost_system.a:   错误添加符号:错误值collect2:错误:ld返回1退出   status make [2]: * [libpwrutils / libpwrutils.so.1.0]错误1 make [1]:   * [libpwrutils / CMakeFiles / pwrutils.dir / all]错误2 make:*** [all]错误2

2 个答案:

答案 0 :(得分:0)

根据需要在主要CMakeLists.txt中扩展编译器标志。

############################################################
# Compiler and linker flags
set(CMAKE_CXX_FLAGS                " ${CMAKE_CXX_FLAGS_INIT} -std=c++11 -fPIC")
set(CMAKE_CXX_FLAGS_DEBUG          "-g -DDEBUG")
set(CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE        "-O4 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DDEBUG"

再次删除缓存。运行cmake并使用ccmake或cmake-gui检查CMAKE_BUILD_TYPE是否为空,但是是否为Debug,Release等。

答案 1 :(得分:0)

如果有人遇到这种情况,并且将 fPIC 标志添加到您的项目没有帮助:

我遇到了同样的问题,我的库在我的 CMakeLists 中正确设置了 -fPIC 标志,我可以在查看编译日志时验证它,例如,我看到: /usr/bin/c++ -fPIC ... etc.

然后我意识到我链接了其他几个库,所以我不得不用 -fPIC 重新编译它们,这就是问题所在。