ライブラリファイル(* .so)は共有依存関係をどのように解決しますか?

ライブラリファイル(* .so)は共有依存関係をどのように解決しますか?

次のコマンドを呼び出すと:

ldd mylib.so

これにより、次のような結果が生成されます。

libopencv_features2d.so.4.1 => /usr/local/lib/libopencv_features2d.so.4.1 (0x00007f83dee6b000)

/usr/local/lib/libopencv_features2d.so.4.1現在の作業ディレクトリにコピーすると、lddが表示されることが予想されます。=> ./libopencv_features2d.so.4.1 (0x00007f83dee6b000)

代わりにまだ/usr/local/lib。このようなシステム依存関係をどのように解決できますか?依存関係の解決方法に影響を与える可能性がある方法もありますか?強制的に私のローカルディレクトリとして解釈することができますか?

答え1

動的リンカーはさまざまな場所でライブラリを検索しますが、デフォルトでは現在のディレクトリは含まれていません。 Linuxでは、リストは次のとおりです

  • バイナリのrpath(存在する場合)で定義されたパス。
  • LD_LIBRARY_PATH(存在する場合)にリストされているパス。
  • バイナリの実行パス(存在する場合)で定義されたパス。
  • 既知のライブラリ/etc/ld.so.cache
  • システムのライブラリパス(/usr/libなど)。

上記のリンクに詳細が記載されています。

LD_LIBRARY_PATH特に、あなたの場合、エクスポートによって依存関係を解決する方法に影響を与える可能性があります。

export LD_LIBRARY_PATH=.

(この値に設定しないでください。)

関連情報