Kas*_*sia 6 linux cmake shared-libraries
我试图安装一个库,但在运行 make 后出现以下错误。如何使用标志重新编译?
make 扫描目标 pwrutils 的依赖关系链接 CXX 共享库 libpwrutils.so /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/ libboost_system.a(error_code.o): relocation R_X86_64_32针对`.rodata.str1.1'不能在制作共享对象时使用;使用 -fPIC 重新编译,/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_system.a:添加符号时出错:错误值 collect2:错误:ld返回 1 退出状态 make[2]: * [libpwrutils/libpwrutils.so.1.0] Error 1 make[1]: * [libpwrutils/CMakeFiles/pwrutils.dir/all] Error 2 make: *** [all] Error 2
如果有人遇到这种情况,并且将fPIC标志添加到您的项目中没有帮助:
我遇到了同样的问题,我的库-fPIC在我的 CMakeLists 中正确设置了标志,我可以在查看编译日志时验证它,例如,我看到:
/usr/bin/c++ -fPIC ... etc.
然后我意识到我链接了其他几个库,所以我必须用 重新编译它们-fPIC,这就是问题所在。
根据需要扩展主要 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"
Run Code Online (Sandbox Code Playgroud)
再次删除缓存。运行 cmake 并使用 ccmake 或 cmake-gui 检查 CMAKE_BUILD_TYPE 是否不为空,而是 Debug、Release 等之一。