Bunu yapmanın en az 3 yolu ile karşılaştım ve hangisinin deyimsel yol olduğunu merak ediyorum. Bunun neredeyse evrensel olarak herhangi bir statik kitaplığa yapılması gerekir. CMake'deki Makefile oluşturucunun bunu statik kitaplıklara otomatik olarak eklememesine şaşırdım. (bir şeyi kaçırmıyorsam?)
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")
Başka varyasyonların da olabileceğine inanıyorum. (bulursanız lütfen sorumu düzenleyin)
Bu sorunun cevabını biliyorsanız, bir 3. taraf CMake projesinin CMakeLists.txt dosyasını değiştirmeden bu bayrakla derlenmesine neden olmanın bir yolu olup olmadığını da biliyor musunuz? Bu bayrağı olmayan statik kitaplıklarla karşılaştım. Statik bir kitaplığı dinamik bir kitaplıkta derlerken sorunlara neden olur.
Sen alırsın:
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")
benim için çalıştı.