2016-03-03 22 views
6

私のやりたいことは、自分のプロジェクトをビルドするときにリンカーが共有ライブラリ(.so)のコピーを使用するようにCMakeListsファイルを設定することです私のビルドツリーで実行可能ファイルをリンクしていますが、リンクされた実行ファイルにrpathを設定していないので、ローダーがそれを要求したときにシステムがライブラリを提供する必要があります。CMake:リンクで使用されている単一のライブラリにrpathを設定しない

具体的には、システムライブラリとしてlibOpenCL.soがインストールされていないビルドファームで、ビルド時にlibOpenCL.soとリンクしたいとします。これを行うには、libOpenCL.soがプロジェクトビルドツリーにあり、CMakeListsファイルの絶対パスを使用して参照されます。この絶対パスは、システムにlibOpenCL.soがインストールされていても使用されていないことを保証することです。

しかし、最終実行ファイルを実行しているとき、CMakeはrpathへの絶対パスを追加しました。このパスは、ライブラリローダが選択したlibOpenCL.soのシステムバージョンを停止して使用します。

シンプルなようですが、わかりません。

ありがとうございます!

+2

CMakeに自動生成させる代わりに、RPATH設定を完全に制御することができます。 [CMakeでRPATHを渡す](https://cmake.org/Wiki/CMake_RPATH_handling)に関するwikiを参照してください。 – Tsyvarev

答えて

0

CMake Wikiによれば、これは問題になることはありません。

デフォルトでは何もRPATH関連の設定を変更しない場合は、CMakeのは内のすべての使用するライブラリへのフルRPATHで実行可能ファイルおよび共有ライブラリをリンクしますビルドツリー。インストール時には、これらのターゲットのRPATHがクリアされ、空のRPATHとともにインストールされます。

あなたは単純にインストールしようとしますか?

+0

私は、インストールrpathではなく、ビルドツリーのrpathを変更したいと思っています。さらに、私が使用するライブラリの中には、一度インストールされたrpathを持つカスタムライブラリがあります。いくつかの図書館のための道を守り、他の図書館のためにそれを捨てるための適切なミックスを得ることは、私の問題の要点です。理想的にはライブラリごとのrpath設定がありますが、私はそれをcmakeで見つけることができます:( – user2746401

+0

@ user2746401最終的なバイナリをどこか別の場所に移動しないでコンパイルするのはどうですか?あなたのバイナリのrpathを削除しても、 – ToniBig

+0

@ToniBig私はrpathを削除すると、ライブラリローダは私のカスタムライブラリをまったく見つけることができなくなります。ローダーは "一時的な" OpenCLライブラリを見つけられません。これはリンカー設定の質問ではなく、ライブラリローダーの質問です。 – user2746401

関連する問題