問題:
Ubuntu 16.04インストールでCMakeとGCC4.9を使用してglibcc/glibc ++を共有ライブラリにリンクするのが困難です。
追加条件:
共有ライブラリをロードすると、Red Hatの本番環境(コピー先)で問題が発生します。異なるlibstc ++バージョンを使用しているためです(エラー:GLIBCXX_3_4_20が見つかりません)。私はSudo権限を持っていないため、マシンをアップグレードできません。
this blog、this post から派生したように、次を使用してlibgccおよびlibgc ++に対して静的リンクをリンクしようとしました。
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
そして再び
set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
しかし、それは機能しません。このCMakeスクリプトはが何をするか:
add_library(myLib SHARED ${SOURCE_FILES})
set(CMAKE_EXE_LINKER_FLAGS " -static")
target_link_libraries(myLib -static-libgcc -static-libstdc++)
これはこれを行う間違った方法でなければなりません、私の知る限り-static-libgccと-static-libstdc ++はライブラリではなくリンカーオプションです...
質問:-libgccおよび-libstdc ++に対して静的にリンクするにはどうすればよいですか?
前もって感謝します!
はい、target_link_libraries
はリンカーフラグまたはリンカーオプションを設定する正しい方法です。
target_link_libraries
のドキュメント:
特定のターゲットをリンクするときに使用するライブラリまたはflagsを指定します。
-lまたは-frameworkではなく、-で始まる項目名は、リンカーフラグとして扱われます。
https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html (オリジナルではない強調)