LINUX.ORG.RU

error while loading shared libraries


0

1

В убунту было все нормально, в дебиан (7) такая ошибка при запуске:

nww@nww:~$ SampleBrowser
SampleBrowser: error while loading shared libraries: libOgreMain.so.1.8.0: cannot open shared object file: No such file or directory
Хотя все библы установлены, я проводил make успешно и make install тоже. библы лежат /usr/local/lib и в /usr/local/lib/OGRE

Что не так?



Последнее исправление: vladmenshikov (всего исправлений: 1)
Ответ на: комментарий от vladmenshikov

Все пути, по которым ищутся либы и исполняемые файлы, можно найти в мане ld. В частности, там написано, что просматриваются папки /lib/, /usr/lib/, переменная LD_LIBRARY_PATH, а также пути, прописанные в определенных конфигурационных файлах. Если в этих конфигах /usr/local/lib/ не содержится, то либы оттуда найдены не будут. А текущий каталог (.) из PATH и LD_LIBRARY_PATH исключен не просто так, а в целях безопасности, и включать его туда - не самая лучшая идея.

Так что «настроен» должен быть не только проект, но и система. А чтобы максимально автоматизировать настройку, лучше всё делать стандартными для данной системы способами. В частности, пакеты исходных кодов лучше брать не с сайта разработчика в виде .tar.{bz2,gz, etc.}, а из репозитория исходных кодов Debian. Для этого даже есть специальная команда. При таком способе есть возможность автоматически установить зависимости для сборки, а кроме того после правки конфигов можно одной командой создать распространяемый deb-пакет, который устанавливается командой dpkg -i в /usr/ (без local). Тогда все либы попадут куда надо, а именно в /lib/ и /usr/lib/.

Так что в принципе всё логично, только надо знать, что и как делать.

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

Dimez
>а /usr/lib/local именно абы какой произвольный путь
Вот, вот этого я и не знал, теперь ясно. Я думал что /usr/lib/local это стандартный путь (там кстати по мимо огра содержатся пионовские либы), и у меня он от чего-то не работал.

i-rinat
>Если ты не в курсе, ubuntu регулярно синхронизируется
Я вкурсе, но там работало, пез внесения правок, неужели думаешь что мне есть смысл врать сейчас?

Kiborg - Спасибо за развернутый ответ.
P.S Исправил префикс, на как тут стало известно верный /usr, вместо /usr/local, проблемы теперь нет. Повторюсь - считал что /usr/local является стандартным путем, соответственно считал, что лежащие там либы должны находится по дефолту.

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

Указание --prefix=/usr, вообще тоже считается неудачным решением. В /usr/local по идее должны обитать пакеты, собранные из исходных кодов на локальной машине, т. е. там находятся файлы, не учтенные в БД установленных пакетов (в ней ведется учет, какой файл какому пакету принадлежит). Если насильно установить программу в /usr, то может случиться конфликт файлов, или один файл заменит другой при установке пакета, или хз что еще.

Кстати, /usr/local по идее должен быть по умолчанию в одном из /etc/ld.so.conf.d/*.conf. Его там точно нет? Потому как это очень странно. Возможно, вам надо было просто запустить ldconfig (или не помню что, короче оно обновляет кэш списка доступных библиотек) после make install.

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

Кстати, /usr/local по идее должен быть по умолчанию в одном из /etc/ld.so.conf.d/*.conf. Его там точно нет?

Не знаю, как посмотреть?

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

Вот у меня /usr/local/lib есть, ld.so туда не смотрит, проверил. Похоже, когда на multiarch переезжали, словили баг.

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

У меня на имеющихся убунте, дебиане и openSUSE /usr/local/lib в /etc/ld.so.conf* прописан, на убунте проверил - сделал простейший хелловорлд, слинкованный с простейшей библиотекой. Закинул в /usr/local/lib библиотеку, запустил - библиотека не найдена. Сделал $ sudo ldconfig, запустил - библиотека подцепилась, т. е. на убунте точно смотрит. На дебиане и сусе не проверял.

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