我至少遇到了3种方法来做,我想知道哪种是惯用的方法。几乎所有静态库都需要这样做。我很惊讶CMake中的Makefile生成器没有自动将其添加到静态库中。(除非我想念什么?)
target_compile_options(myLib PRIVATE -fPIC)
add_compile_options(-fPIC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")
我相信可能还会有其他变化。(如果找到一个,请编辑我的问题)
如果您碰巧知道此问题的答案,您是否还知道是否有一种方法可以使第三方CMake项目使用此标志进行编译,而无需修改其CMakeLists.txt文件?我遇到了缺少该标志的静态库。在将静态库编译为动态库时会引起问题。
你得到:
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")
对我有用。