1. ホーム
  2. c++

[解決済み] CMAKEで-fPICコンパイラーオプションを追加する慣用的な方法は何ですか?

2022-04-21 19:16:42

質問

少なくとも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")

また、他のバリエーションもあると思います。(見つけたら質問を編集してください)

もしあなたがこの質問に対する答えを知っているなら、サードパーティのCMakeプロジェクトのCMakeLists.txtファイルを変更せずに、このフラグでコンパイルさせる方法があるかどうかも知っていますか? 私はこのフラグがない静的ライブラリに遭遇したことがあります。 これは、静的ライブラリを動的ライブラリにコンパイルする際に問題を引き起こします。

得ることができます。

relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC

解決方法は?

すべてのターゲットに位置独立コードプロパティを設定することができます。

set(CMAKE_POSITION_INDEPENDENT_CODE ON)

または特定のライブラリで

add_library(lib1 lib1.cpp)
set_property(TARGET lib1 PROPERTY POSITION_INDEPENDENT_CODE ON)

参考 cmake_position_independent_code cmake ビルドシステム