次のコマンドを呼び出すと:
_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
_に解決されます。何故ですか?そして、このようなシステムの依存関係はどのように解決されますか?依存関係の解決方法に影響を与える方法もありますか?ローカルディレクトリに解決するように強制できますか?
ダイナミックリンカはさまざまな場所でライブラリを検索しますが、デフォルトでは現在のディレクトリは含まれていません。 Linuxの場合、 リストは
LD_LIBRARY_PATH
にリストされているパス(ある場合)。/etc/ld.so.cache
で知られているライブラリ。/usr/lib
など)。上記のリンクで詳細を確認できます。
LD_LIBRARY_PATH
をエクスポートすることで、依存関係の解決方法に影響を与えることができます。特にあなたの場合:
export LD_LIBRARY_PATH=.
(その値に設定したままにしないでください。)