LINUX.ORG.RU

загрузка библиотеки


0

0

Всем привет!
У меня возникла такая проблема:
Есть библиотека и исполнимый файл, лежащие в одном каталоге.
exe-шник требует эту библиотеку для запуска. при попытке запуска система сообщает о невозможности библиотеку, хотя она лежит тут же.

Я пробовал
ldconfig -n .
и
ld-linux.so с разными параметрами, но всё с нулевым эффектом
Дистрибутив CentOS 5


Обычно приложение ищет библиотеку не в том же каталоге, а в /usr/lib или /usr/local/lib.

Agent666
()
Ответ на: комментарий от kondor

К сожалению и это пробовал!

[root@CentOS MyCppClient]# ./csender
./csender: error while loading shared libraries: libjmssend.so: cannot open shared object file: No such file or directory
[root@CentOS MyCppClient]# pwd
/home/sonic/work/JMS_C/SonicCClient6.1_RHEL_gcc3.4.4/Linux_AS4/samples/CPP/MyCp pClient
[root@CentOS MyCppClient]# LD_LIBRARY_PATH=/home/sonic/work/JMS_C/SonicCClient6.1_RHEL_gcc3.4.4/Linux_AS4/ samples/CPP/MyCppClient
[root@CentOS MyCppClient]# echo $LD_LIBRARY_PATH
/home/sonic/work/JMS_C/SonicCClient6.1_RHEL_gcc3.4.4/Linux_AS4/samples/CPP/MyCp pClient
[root@CentOS MyCppClient]# ./csender
./csender: error while loading shared libraries: libjmssend.so: cannot open shared object file: No such file or directory
[root@CentOS MyCppClient]# ls
caller.cpp csender csender.cpp csender.h libjmssend.so mk_cpp.sh save
[root@CentOS MyCppClient]#

и

[root@CentOS MyCppClient]# /lib/ld-2.5.so csender
csender: error while loading shared libraries: csender: cannot open shared object file
[root@CentOS MyCppClient]#


Прямо мистика какая-то...

KUser
() автор топика
Ответ на: комментарий от kondor

Да, при создании символьной ссылки на либу в /lib всё работает, но не хочется лезть в системный каталог

KUser
() автор топика
Ответ на: комментарий от KUser

Можно немного подругому. Использовать LD_PRELOAD.

Valmont ★★★
()
Ответ на: комментарий от KUser

устанавливая таким образом LD_LIBRARY_PATH вы затираете предыдущее содержимое переменной (а там указаны пути к системным библиотекам). в итоге загрузчик ващу библиотеку находит, но вот системные библиотеки уже нет.

cobold ★★★★★
()
Ответ на: комментарий от cobold

>устанавливая таким образом LD_LIBRARY_PATH вы затираете предыдущее содержимое переменной

bullshit

anonymous
()
Ответ на: комментарий от cobold

>устанавливая таким образом LD_LIBRARY_PATH вы затираете предыдущее содержимое переменной (а там указаны пути к системным библиотекам). в итоге загрузчик ващу библиотеку находит, но вот системные библиотеки уже нет.

ого!

1. значение переменной не было экспортировано, потому для вызываемых программ не изменилось

2. а как же это:

>error while loading shared libraries: libjmssend.so: cannot open shared object file: No such file or directory

тут вроде пользовательская библиотека не была найдена

3. кто хранит пути к системным библиотекам в LD_LIBRARY_PATH ? они хранятся в /lib, /usr/lib, а также по путям описаным в /etc/ld.so.conf.

3.1. впрочем да, в любом случае нужно делать export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/some/path

man ld.so

man ldconfig

generatorglukoff ★★
()
Ответ на: комментарий от cobold

Возможно, но она была пустой.
Хотя конечно так устанавливать не совсем правильно

Вообще конечно проблема неожиданная: я очень удивился когда система не нашла либу в текущем каталоге.

KUser
() автор топика
Ответ на: комментарий от cobold

>аргументы

Может не стоит так явно демонстрировать своё незнание вопроса? Строка
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
помещает в переменную LD_LIBRARY_PATH строку, состоящую из предыдущего значения этой переменной и строки ":." Здесь ':' - это разделитель, а '.' - это текущий каталог. Далее, пути к системным библиотекам написаны совсем не в этой переменной. Она вообще может не быть установлена. По поводу того, где ищутся библиотеки - man ld.so

Laz ★★★★★
()
Ответ на: комментарий от KUser

>>я очень удивился когда система не нашла либу в текущем каталоге.

это ж не винда ;)

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.