我尝试安装库但运行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
答案 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
重新编译它们,这就是问题所在。