私はこれを行うために少なくとも3つの方法に出くわしており、どちらが慣用的な方法であるか疑問に思っています。これは、静的ライブラリに対してほぼ普遍的に行う必要があります。CMakeのMakefileジェネレーターがこれを静的ライブラリーに自動的に追加しないことに驚いています。(私が何かを逃していない限り?)
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")
他にもバリエーションがあると思います。(もし見つけたら私の質問を編集してください)
この質問への答えを知っている場合、CMakeLists.txtファイルを変更せずに、サードパーティのCMakeプロジェクトをこのフラグでコンパイルする方法があるかどうかもわかりますか?そのフラグがない静的ライブラリに出くわしました。静的ライブラリを動的ライブラリにコンパイルするときに問題が発生します。
あなたが得る:
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")
は私のために働いた。