web-dev-qa-db-ja.com

CMake:libgccおよびlibstdc ++に対して静的にリンクして共有ライブラリーに入れる

問題:

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 ++に対して静的にリンクするにはどうすればよいですか?

前もって感謝します!

16
DA--

はい、target_link_librariesリンカーフラグまたはリンカーオプションを設定する正しい方法です。

target_link_librariesのドキュメント:

特定のターゲットをリンクするときに使用するライブラリまたはflagsを指定します。

-lまたは-frameworkではなく、-で始まる項目名は、リンカーフラグとして扱われます。

https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html (オリジナルではない強調)

14
SpamBot