/usr/local/lib
共有ライブラリを検索しましたか?私はこのエラーがあります:
[Leo@chessman ~]$ whereis ffmpeg
ffmpeg: /usr/local/bin/ffmpeg
[Leo@chessman ~]$ ffmpeg
ffmpeg: error while loading shared libraries: libavcore.so.0: cannot open shared object file: No such file or directory
[Leo@chessman ~]$ ls /usr/local/lib/libav*
/usr/local/lib/libavcodec.a /usr/local/lib/libavfilter.a
/usr/local/lib/libavcodec.so /usr/local/lib/libavfilter.so
/usr/local/lib/libavcodec.so.52 /usr/local/lib/libavfilter.so.1
/usr/local/lib/libavcodec.so.52.108.0 /usr/local/lib/libavfilter.so.1.74.0
/usr/local/lib/libavcore.a /usr/local/lib/libavformat.a
/usr/local/lib/libavcore.so /usr/local/lib/libavformat.so
/usr/local/lib/libavcore.so.0 /usr/local/lib/libavformat.so.52
/usr/local/lib/libavcore.so.0.16.1 /usr/local/lib/libavformat.so.52.94.0
/usr/local/lib/libavdevice.a /usr/local/lib/libavutil.a
/usr/local/lib/libavdevice.so /usr/local/lib/libavutil.so
/usr/local/lib/libavdevice.so.52 /usr/local/lib/libavutil.so.50
/usr/local/lib/libavdevice.so.52.2.3 /usr/local/lib/libavutil.so.50.36.0
[Leo@chessman ~]$
LD_LIBRARY_PATH
は、検索するすべてのディレクトリを含めるように設定され、再度テストします。
これをすばやくテストできます:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ffmpeg
その呼び出しに対してのみ設定されます。
または、/etc/ld.so.conf
これには、検索されたデフォルトのディレクトリが含まれます。一部のLinuxディストリビューションには、/usr/local/lib
そのファイル。
キャッシュを更新する必要があるかもしれないことに注意してください/etc/ld.so.cache
(ルートとして、またはldconfig
を使用して)Sudo
を実行します。
プログラムには、ライブラリがどこにあるかについてのコンパイル済み(OK、「リンクイン」)のアイデアがあります。プログラムが/usr/local/lib
でlibを見つけることを期待している場合、プログラムはそうなります。
ldconfig
と呼ばれるプログラムと/etc/ld.so.conf
と呼ばれる設定ファイル、そしておそらく/etc/ld.so.conf.d
もあり、これらはサイト固有のディレクトリを指定するために使用されます。
環境変数LD_LIBRARY_PATH
のような他のノブをリストする「man ld.so」を読んでください。
LD.SO(8) Linux Programmer’s Manual LD.SO(8)
NAME
ld.so, ld-linux.so* - dynamic linker/loader
DESCRIPTION
The programs ld.so and ld-linux.so* find and load the shared libraries
needed by a program, prepare the program to run, and then run it.
. . .
...そして...
LDCONFIG(8) Linux Programmer’s Manual LDCONFIG(8)
NAME
/sbin/ldconfig - configure dynamic linker run time bindings
SYNOPSIS
/sbin/ldconfig [ -nNvXV ] [ -f conf ] [ -C cache ] [ -r root ] direc-
tory ...
/sbin/ldconfig -l [ -v ] library ...
/sbin/ldconfig -p
DESCRIPTION
ldconfig creates the necessary links and cache to the most recent
shared libraries found in the directories specified on the command
line, in the file /etc/ld.so.conf, and in the trusted directories (/lib
and /usr/lib). The cache is used by the run-time linker, ld.so or ld-
linux.so. ldconfig checks the header and filenames of the libraries it
encounters when determining which versions should have their links
updated.
. . .
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html から:
GNU標準では、ソースコードを配布するときに、デフォルトですべてのライブラリを/ usr/local/libにインストールすることを推奨しています(すべてのコマンドは/ usr/local/binに移動する必要があります)。
...
検索するディレクトリのリストは、/ etc/ld.so.confファイルに保存されます。多くのRed Hat派生ディストリビューションでは、通常、/ etc/ld.so.confファイルに/ usr/local/libが含まれていません。私はこれをバグと考えており、/ usr/local/libを/etc/ld.so.confに追加することは、Red Hatから派生したシステムで多くのプログラムを実行するために必要な一般的な「修正」です。
Debianでは/etc/ld.so.conf
にはinclude /etc/ld.so.conf.d/*.conf
が含まれ、/etc/ld.so.conf.d/libc.conf
には次が含まれます
# libc default configuration
/usr/local/lib
IIRC、ld.soは、ファイル/etc/ld.so.confを使用して、共有オブジェクトを検索するディレクトリをリストします。環境変数LD_LIBRARY_PATH
を使用することもできます。
LinuxのELFヘッダーには、RPATHエントリも含まれる場合があります。 RPATHエントリを実行するには
readelf -d ffmpeg | grep RPATH
この結果はおそらく得られないでしょう。コンパイル中にRPATHを設定するには:
gcc ... -wl, -rpath=MY_PATH
実行ディレクトリを使用する場合は、\$Origin
を使用します
Chrpathなどの一部のプログラムでは、既存のバイナリのRPATHを編集できます。
注:setuidされたプログラムは、セキュリティリスクがあるためLD_LIBRARY_PATH
を使用しません。
find / -name 'libavdevice.so.*'
このライブラリが利用可能かどうかを確認します。
Sudo gedit /etc/ld.so.conf
これらの行を追加して保存します。
include /usr/local/lib
include /usr
ldconfig
この古い質問の別のオプションは、LD_RUN_PATHを使用することです。
export LD_RUN_PATH=/usr/local/lib
その後、再度コンパイルします。
make
make install
ldconfig
LD_LIBRARY_PATHを使用するよりも優れています。 @cweiskeからの元の参照 linuxmafia.com/faq/Admin/ld-lib-path.html