.so пути поиска
Я новичок в Linux (из Windows). Я хотел бы понять детали того, как разделяемые объекты (файлы .so) загружаются во время выполнения. В соответствии сhttp://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html файл /etc/ld.so.conf настраивает каталоги для поиска файлов .so во время выполнения. Однако эксперимент, показанный ниже, указывает на то, что это не так. / usr / local / lib находится в одном из файлов .conf в /etc/ld.so.conf.d, но когда мой .so находится в / usr / local / lib, он не найден во время выполнения. И наоборот / usr / libnot настраивается /etc/ld.so.conf, но когда мой .so находится в / usr / lib, онis найдено во время выполнения.
Что мне не хватает?
Спасибо, Дейв
davids@ds-ub64-7:/$ # Display the .so search path configured in /etc/ld.so.conf
davids@ds-ub64-7:/$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
davids@ds-ub64-7:/$ cat /etc/ld.so.conf.d/*.conf
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib32/alsa-lib
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
davids@ds-ub64-7:/$ # libsotest.so.1 is in /usr/local/lib
davids@ds-ub64-7:/$ ls -la /usr/local/lib/libsotest*
lrwxrwxrwx 1 root root 14 2012-07-19 08:24 /usr/local/lib/libsotest.so -> libsotest.so.1
lrwxrwxrwx 1 root root 18 2012-07-19 08:24 /usr/local/lib/libsotest.so.1 -> libsotest.so.1.0.1
-rwxr-xr-x 1 davids davids 7952 2012-07-19 08:13 /usr/local/lib/libsotest.so.1.0.1
davids@ds-ub64-7:/$ # But when I run an executable that refrs to libsotest.so.1, the loader doesn't find it.
davids@ds-ub64-7:/$ /projects/sotest/exe/sotestexe
/projects/sotest/exe/sotestexe: error while loading shared libraries: libsotest.so.1: cannot open shared object file: No such file or directory
davids@ds-ub64-7:/$ # Configure loader to display the paths it's searching...it's searching /usr/lib but not /usr/local/lib
davids@ds-ub64-7:/$ export LD_DEBUG=lib
davids@ds-ub64-7:/$ /projects/sotest/exe/sotestexe
warning: debug option `lib' unknown; try LD_DEBUG=help
/projects/sotest/exe/sotestexe: error while loading shared libraries: libsotest.so.1: cannot open shared object file: No such file or directory
davids@ds-ub64-7:/$ export LD_DEBUG=libs
davids@ds-ub64-7:/$ /projects/sotest/exe/sotestexe
6691: find library=libsotest.so.1 [0]; searching
6691: search cache=/etc/ld.so.cache
6691: search path=/lib/tls/x86_64:/lib/tls:/lib/x86_64:/lib:/usr/lib/tls/x86_64:/usr/lib/tls:/usr/lib/x86_64:/usr/ lib:/lib/x86_64-linux-gnu/tls/x86_64:/lib/x86_64-linux-gnu/tls:/lib/x86_64-linux- gnu/x86_64:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/tls/x86_64:/usr/lib/x86_64-linux- gnu/tls:/usr/lib/x86_64-linux-gnu/x86_64:/usr/lib/x86_64-linux-gnu (system search path)
6691: trying file=/lib/tls/x86_64/libsotest.so.1
6691: trying file=/lib/tls/libsotest.so.1
6691: trying file=/lib/x86_64/libsotest.so.1
6691: trying file=/lib/libsotest.so.1
6691: trying file=/usr/lib/tls/x86_64/libsotest.so.1
6691: trying file=/usr/lib/tls/libsotest.so.1
6691: trying file=/usr/lib/x86_64/libsotest.so.1
6691: trying file=/usr/lib/libsotest.so.1
6691: trying file=/lib/x86_64-linux-gnu/tls/x86_64/libsotest.so.1
6691: trying file=/lib/x86_64-linux-gnu/tls/libsotest.so.1
6691: trying file=/lib/x86_64-linux-gnu/x86_64/libsotest.so.1
6691: trying file=/lib/x86_64-linux-gnu/libsotest.so.1
6691: trying file=/usr/lib/x86_64-linux-gnu/tls/x86_64/libsotest.so.1
6691: trying file=/usr/lib/x86_64-linux-gnu/tls/libsotest.so.1
6691: trying file=/usr/lib/x86_64-linux-gnu/x86_64/libsotest.so.1
6691: trying file=/usr/lib/x86_64-linux-gnu/libsotest.so.1
6691:
/projects/sotest/exe/sotestexe: error while loading shared libraries: libsotest.so.1: cannot open shared object file: No such file or directory
davids@ds-ub64-7:/$