Ich habe mindestens drei Möglichkeiten gefunden, dies zu tun, und ich frage mich, welche der idiomatische Weg ist. Dies muss nahezu universell für jede statische Bibliothek durchgeführt werden. Ich bin überrascht, dass der Makefile-Generator in CMake dies nicht automatisch zu statischen Bibliotheken hinzufügt. (es sei denn, ich vermisse etwas?)
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")
Ich glaube, es könnte auch andere Variationen geben. (Bitte bearbeiten Sie meine Frage, wenn Sie eine finden)
Wenn Sie die Antwort auf diese Frage kennen, wissen Sie auch, ob es eine Möglichkeit gibt, ein CMake-Projekt eines Drittanbieters mit diesem Flag zu kompilieren, ohne die Datei CMakeLists.txt zu ändern? Ich bin auf statische Bibliotheken gestoßen, denen dieses Flag fehlt. Es verursacht Probleme beim Kompilieren einer statischen Bibliothek in eine dynamische Bibliothek.
Du erhältst:
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")
hat bei mir funktioniert.