J'ai rencontré au moins 3 façons de faire cela et je me demande quelle est la manière idiomatique. Cela doit être fait presque universellement dans n'importe quelle bibliothèque statique. Je suis surpris que le générateur Makefile de CMake ne l'ajoute pas automatiquement aux bibliothèques statiques. (sauf si je manque quelque chose?)
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")
Je pense qu'il pourrait également y avoir d'autres variantes. (veuillez modifier ma question si vous en trouvez une)
Si vous connaissez la réponse à cette question, savez-vous également s'il existe un moyen de faire compiler un projet CMake tiers avec cet indicateur sans modifier son fichier CMakeLists.txt? J'ai couru sur des bibliothèques statiques sans cet indicateur. Cela pose des problèmes lors de la compilation d'une bibliothèque statique dans une bibliothèque dynamique.
Vous obtenez:
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")
fonctionné pour moi.