Saya telah menemukan setidaknya 3 cara untuk melakukan ini dan saya bertanya-tanya mana yang merupakan cara idiomatik. Ini perlu dilakukan hampir secara universal untuk semua perpustakaan statis. Saya terkejut bahwa generator Makefile di CMake tidak secara otomatis menambahkan ini ke pustaka statis. (kecuali saya melewatkan sesuatu?)
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")
Saya yakin mungkin juga ada variasi lain. (harap edit pertanyaan saya jika Anda menemukannya)
Jika Anda mengetahui jawaban untuk pertanyaan ini, apakah Anda juga tahu jika ada cara yang menyebabkan proyek CMake pihak ketiga dikompilasi dengan tanda ini tanpa mengubah file CMakeLists.txt? Saya telah menemukan perpustakaan statis yang kehilangan bendera itu. Ini menyebabkan masalah saat menyusun pustaka statis menjadi pustaka dinamis.
Anda mendapatkan:
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")
berhasil untuk saya.