FastNetMon

Monday 8 March 2010

Как указать путь ко своим .so файлам или "cannot open shared object file: No such file or directory"

Для этого есть переменная среды: LD_LIBRARY_PATH, которая указывает расположение пользовательских динамических библиотек. Также есть способ глобально добавить свою папку в путь поиска посредством ldconfig.

Имеем приложение, слинкованное с нашим кастомным cURL, которого система не видит:

ldd a.out
libcurl.so.4 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00002b7bbd9e1000)
libm.so.6 => /lib/libm.so.6 (0x00002b7bbdced000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00002b7bbdf70000)
libc.so.6 => /lib/libc.so.6 (0x00002b7bbe188000)
/lib64/ld-linux-x86-64.so.2 (0x00002b7bbd7c4000)


Теперь добавляем свой путь поиска динамических библиотек и все работает нормально:

LD_LIBRARY_PATH=/opt/curl7_20_0/lib ldd a.out
libcurl.so.4 => /opt/curl7_20_0/lib/libcurl.so.4 (0x00002ac50ca84000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00002ac50ccdd000)
libm.so.6 => /lib/libm.so.6 (0x00002ac50cfe9000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00002ac50d26c000)
libc.so.6 => /lib/libc.so.6 (0x00002ac50d484000)
libssh2.so.1 => /usr/lib/libssh2.so.1 (0x00002ac50d7d7000)
libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00002ac50d9fa000)
libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00002ac50dc4c000)
librt.so.1 => /lib/librt.so.1 (0x00002ac50dfe7000)
libz.so.1 => /usr/lib/libz.so.1 (0x00002ac50e1f0000)
/lib64/ld-linux-x86-64.so.2 (0x00002ac50c867000)
libgcrypt.so.11 => /usr/lib/libgcrypt.so.11 (0x00002ac50e408000)
libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x00002ac50e66f000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00002ac50e772000)
libdl.so.2 => /lib/libdl.so.2 (0x00002ac50e98b000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002ac50eb8f000)


Запускать софт с кастомным путем до динамических библиотек аналогично:

LD_LIBRARY_PATH=/opt/curl7_20_0/lib ./a.out

No comments :

Post a Comment

Note: only a member of this blog may post a comment.