Me he encontrado con al menos 3 formas de hacer esto y me pregunto cuál es la forma idiomática. Esto debe realizarse de manera casi universal en cualquier biblioteca estática. Me sorprende que el generador Makefile en CMake no agregue esto automáticamente a las bibliotecas estáticas. (a menos que me falte algo?)
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")
Creo que también puede haber otras variaciones. (edite mi pregunta si encuentra una)
Si conoce la respuesta a esta pregunta, ¿también sabe si hay una forma de hacer que un proyecto CMake de terceros se compile con esta bandera sin modificar su archivo CMakeLists.txt? Me he encontrado con bibliotecas estáticas que no tienen esa bandera. Causa problemas al compilar una biblioteca estática en una biblioteca dinámica.
Usted obtiene:
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")
funcionó para mí.