Is /usr/local/lib
searched for shared libraries ? I have this error:
[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 ~]$
Make sure your
LD_LIBRARY_PATH
is set up to include all directories you want to search and then test it again.You can test this quickly with:
which will set it only for that invocation.
Alternatively, you can edit
/etc/ld.so.conf
which contains the default directories searched. Some Linux distributions may not include/usr/local/lib
in that file.Note that you may also need to update the cache
/etc/ld.so.cache
by runningldconfig
(as root, or withsudo
).Another option for this old question is to use LD_RUN_PATH.
Then compile again:
Better than using LD_LIBRARY_PATH. Original reference from @cweiske linuxmafia.com/faq/Admin/ld-lib-path.html
Yes and no
Programs have a compiled-in (ok, "linked-in") idea of where their libraries are to be found. If a program is expecting to find its lib in
/usr/local/lib
then it will.There is also a program called
ldconfig
and a configuration file called/etc/ld.so.conf
and most likely an/etc/ld.so.conf.d
, and these are used to specify site-specific directories.Read "man ld.so" which lists other knobs like the environment variable
LD_LIBRARY_PATH
....and...
IIRC, ld.so uses the file /etc/ld.so.conf to list the directories to search for shared objects. You may also use the environment variable
LD_LIBRARY_PATH
.ELF headers on linux may also contain an RPATH entry. To check the RPATH entry run
You will probably not get any result from this. To set the RPATH while compiling do:
If you want the execution directory use
\$ORIGIN
Some programs, such as chrpath, allow you to edit the RPATH of an existing binary.
NOTE: Any program that is setuid will not use
LD_LIBRARY_PATH
as it is a security risk.find / -name 'libavdevice.so.*'
to find out whether this library is available.sudo gedit /etc/ld.so.conf
Add these lines and save:
ldconfig
From http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html:
...
On Debian
/etc/ld.so.conf
containsinclude /etc/ld.so.conf.d/*.conf
, and/etc/ld.so.conf.d/libc.conf
contains