2016-05-18 20 views
2

/home/test/lib/libTest.soのパスに.soがあり、RPATH/home/test/lib/を指しているmyexecというビルドファイルがあります。しかし、lddmyexecに書き込んだときには、libTest.soが見つかりませんでした。それが動作するには、export LD_LIBRARY_PATHを実行しなければなりませんでした。実行可能ファイルにC++の動的リンクライブラリが見つかりません

は、私が確認している:

  1. libTest.so

    は、実行可能ファイルに組み込まれている/home/test/lib/を示しん/home/test/lib/
  2. objdump -x myexec | grep RUNPATHには存在しません。

誰もが、LD_LIBRARY_PATHを設定せずにライブラリを見つけることができなかった理由はありますか? hereから

+0

[MVCE](http://stackoverflow.com/help/mcve) –

答えて

1

:Linuxの場合

は、環境変数LD_LIBRARY_PATHは、ディレクトリの標準セットとして

前に、ライブラリが最初に検索されなければならないコロンで区切ったディレクトリのセットです。 LD_LIBRARY_PATHを完全に置き換えないように注意する必要があります。これは、システム共有ライブラリのパスを混乱させる可能性があります。 常にexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/pathを使用してください。

EDIT 1:rpathについては

libTest.soが他のライブラリに依存しないことを確認してください。 hereを見られるように、別の方法として、あなたが、代わりに-rpathのgccので-rpath-linkオプションを使用することができます。

-rpath-リンクつの共有ライブラリが別のものを必要とするかもしれない

ELFまたはSunOSのを使用して、DIR。これは、ld共有リンクが入力ファイルの1つとして共有ライブラリを含む場合に発生します。リンクされていない再配置不可能なリンクを実行するときにリンカがそのような依存関係に遭遇すると、自動的に必要な共有ライブラリを見つけようとし、明示的に含まれていなければリンクに含めます。そのような場合、-rpath-linkオプションは検索する最初のディレクトリセットを指定します。

EDIT 2:

あなたはより多くの助けが必要な場合は、お知らせください:

    ため
  1. 正確なパラメータreadelf -d /path/to/binaryのためにコンパイル
  2. 出力ldd /path/to/binaryためのコマンド
  3. 出力時に使用されるrpath
+1

これは実際に問題に対処していますか? OPは、なぜ必要なパスが実行可能ファイルに既に組み込まれている場合に、外部環境変数( 'LD_LIBRARY_PATH')が必要なのかを尋ねました。 – Spencer

+0

私は答えが満足できないと認めます。私はそれを編集して、より多くの情報を要求しました。申し訳ありません。 –

関連する問題