0

通常の動作の一部として、不安定なレガシー コードを含む別の実行可能ファイル fork()/execs() を使用する C++ 共有ライブラリがあります。この実行可能ファイルは、このライブラリ以外では役に立たないので、PATH ディレクトリに配置することは避けたいと思います。また、さまざまな場所に複数のコピーをインストールできるようにしたいので、ハードコードされたパスは望ましくありません。exec() がこの実行可能ファイルを見つけられるようにする RPATH に相当するものはありますか? または、ライブラリ自体から共有ライブラリの rpath を照会することは可能ですか?

編集: この投稿は、後者が可能であることを示唆しています。尋ねられた質問に対する答えを誰かが知っている場合に備えて、これを開いたままにします。Linux で現在の rpath を検査する方法はありますか?

4

2 に答える 2

1

getenv共有オブジェクト内の環境を取得するためにいつでも使用できますが、RPATH本当にそのために使用したいのでしょうか? 共有オブジェクトのユーザーのホーム ディレクトリ (またはカスタム環境変数) に、外部バイナリを実行する場所を指定する何らかの構成ファイルを持たせたほうがよいのではないでしょうか?

于 2011-03-31T19:43:29.130 に答える
0

execve()これを行う最善の方法は、環境変数を設定してバイナリを実行することだと思います。おそらく、PATHを使用して実行可能ファイルのコピーを見つけるシェルを設定するだけPATHexecve()済みます。ライブラリに相当するものは、このライブラリを依存関係として持つバイナリLD_LIBRARY_PATHを設定することです。execve()

いずれの場合も、外部環境を変更するのではなく、 で使用される変更されたコピーを作成するだけですexecve()

于 2011-06-15T02:31:22.157 に答える