Mi sono imbattuto in almeno 3 modi per farlo e mi chiedo quale sia il modo idiomatico. Questo deve essere fatto quasi universalmente su qualsiasi libreria statica. Sono sorpreso che il generatore di Makefile in CMake non lo aggiunga automaticamente alle librerie statiche. (a meno che non mi manchi qualcosa?)
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")
Credo che potrebbero esserci anche altre variazioni. (per favore modifica la mia domanda se ne trovi una)
Se ti capita di conoscere la risposta a questa domanda, sai anche se esiste un modo per far sì che un progetto CMake di terze parti venga compilato con questo flag senza modificare il suo file CMakeLists.txt? Mi sono imbattuto in librerie statiche senza quel flag. Causa problemi durante la compilazione di una libreria statica in una libreria dinamica.
Ottieni:
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")
funzionato per me.