LINUX.ORG.RU
ФорумAdmin

Gentoo, отсутствие .so файла в системе. Как решать по-умному?


0

1

Вот такая история:

xx@(none) ~ $ motion
motion: error while loading shared libraries: libavformat.so.52: cannot open shared object file: No such file or directory

(none) ~ # revdep-rebuild
 * Configuring search environment for revdep-rebuild

 * Checking reverse dependencies
 * Packages containing binaries and libraries broken by a package update
 * will be emerged.

 * Collecting system binaries and libraries
 * Found existing 1_files.rr
 * Collecting complete LD_LIBRARY_PATH
 * Found existing 2_ldpath.rr.
 * Checking dynamic linking consistency
[ 100% ]                 

 * Dynamic linking on your system is consistent... All done. 
(none) ~ # 

xx@(none) ~ $ motion
motion: error while loading shared libraries: libavformat.so.52: cannot open shared object file: No such file or directory

(none) ~ # emerge --unmerge motion ffmpeg; emerge -v ffmpeg motion

xx@(none) ~ $ motion
motion: error while loading shared libraries: libavformat.so.52: cannot open shared object file: No such file or directory

★☆

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

Некошерно пить кровь христианских младенцев. Ставьте симлинк на нужную версию, судя по гуглу этот ваш motion всегда имеет проблемы с пакетами.

AlexCones ★★★
()
$ equery b libavformat.so
 * Searching for libavformat.so ... 
media-video/ffmpeg-0.10.6 (/usr/lib/libavformat.so -> libavformat.so.53.32.100)

В твоем случае - просто баг, недоследили, сделай симлинк libavformat.so -> libavformat.so.52

Kroz ★★★★★
()

Можно попробовать:

lafilefixer --justfixit ; emerge -DNu world ; emerge --depclean ; revdep-rebuild

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

Универсальное решение.

Как решать по-умному?

emerge world ?

Есть проблемы? @ Пересобери мир!!!

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

Ставьте симлинк на нужную версию,

На какую нужную версию ? :-) Написано же:
error while loading shared libraries: libavformat.so.52
Нет, можно, конечно, сделать libavformat.so.52 симлинком на то, что есть, но это чревато граблями. Если, конечно, там не лежит libavformat.so.52.x.x рядом. На такую - можно.

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

сделай симлинк libavformat.so -> libavformat.so.52

1. Зачем ему libavformat.so ?
2. libavformat.so.52 отсутствует, как следует из сообщения об ошибке.

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

1. Зачем ему libavformat.so ?

Потому что libavformat.so.52 - это версия libavformat.so. Как правило libavformat.so это симлинк на libavformat.so.52 .

2. libavformat.so.52 отсутствует, как следует из сообщения об ошибке

Правильно. Симлинк не создан, нужно создать его вручную.

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

Как правило libavformat.so это симлинк на

Который нужен исключительно для сборки других приложений с этой библиотекой. Но линкуется собираемое приложение с name.so.N, а никак не с name.so. Имя вида name.so могут всякие плагины иметь и т.п., но это не тот случай.

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

Ты читать умеешь? runtime linker пишет, что не может найти файл, прописанный в DT_NEEDED. Какой в жопу dlopen()?

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

Ещё проверь

# LD_DEBUG=libs motion
      3270:	find library=libpthread.so.0 [0]; searching
      3270:	 search cache=/etc/ld.so.cache
      3270:	  trying file=/lib64/libpthread.so.0
      3270:	
      3270:	find library=libjpeg.so.8 [0]; searching
      3270:	 search cache=/etc/ld.so.cache
      3270:	  trying file=/usr/lib64/libjpeg.so.8
      3270:	
      3270:	find library=libavformat.so.53 [0]; searching
      3270:	 search cache=/etc/ld.so.cache
      3270:	  trying file=/usr/lib64/libavformat.so.53
      3270:	
      3270:	find library=libavcodec.so.53 [0]; searching
      3270:	 search cache=/etc/ld.so.cache
      3270:	  trying file=/usr/lib64/libavcodec.so.53
      3270:	
      3270:	find library=libavutil.so.51 [0]; searching
      3270:	 search cache=/etc/ld.so.cache
...
anonymous
()

Да, и покажи

equery b libavformat.so
anonymous
()
Ответ на: комментарий от Kroz

Собираемое? Запускаемое!

Да не важно. Сначала оно собираемое, потом запускаемое. «*.so», в подавляющем случае, в рабочей системе не нужны. Про исключения я уже упоминал.

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

Нет, важно. У ТС оно собралось. Значит для сборки библиотека не нужна. Нужна для запуска. Здесь не статическая линковка, здесь библиотека динамически линкуется. Так что

Который нужен исключительно для сборки других приложений с этой библиотекой.

не корректно.

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

У ТС оно собралось.

Это очевидно, что как-то и где-то оно было собрано.

Нужна для запуска.

Нет.

Здесь не статическая линковка,

Для статически собранных приложений вообще ни про какие *so* говорить не стоит.

здесь библиотека динамически линкуется. Так что

Так что нужен ему симлинк libavformat.so.52, который указывает на соответствующую библиотеку. А не симлинк libavformat.so, который предназначен только для сборки.

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

Это очевидно, что как-то и где-то оно было собрано.

Это Gentoo: здесь качаются исходники и собирается на твоем компе. Так что ТС собрал это приложение без присутствия нужной библиотеки.

> Нужна для запуска.
Нет.

То есть ты хочешь сказать, что я могу собрать прогу, потом удалить либу и прога будет работать? При статической линковке - да, при динамической - нет.

Так что нужен ему симлинк libavformat.so.52, который указывает на соответствующую библиотеку. А не симлинк libavformat.so, который предназначен только для сборки.

Я ж и говорю, нужен для запуска, а не для сборки. Хотя при сборке AFAIK проверяется наличие либы, но здесь ТС поймал баг.

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

Так что ТС собрал это приложение без присутствия нужной библиотеки.

Если бы он так собрал, то она не была бы нужна. А Генту это, или нет, не важно.

То есть ты хочешь сказать, что я могу собрать прогу, потом удалить либу и прога будет работать?

Симлинк libname.so на libname.so.N ? Конечно можешь. libname.so не нужен для работы.

AS ★★★★★
()
Ответ на: комментарий от anonymous
(none) xx # equery b `which motion`
 * Searching for /usr/bin/motion ... 
media-video/motion-3.2.12-r2 (/usr/bin/motion)
kiverattes ★☆
() автор топика

Как решать по-умному?

Не использовать gentoo.

anonymous
()

х.з. откуда она

> locate libavformat.so.52
/usr/local/lib/libavformat.so.52.111.0
> pkg_which /usr/local/lib/libavformat.so.52.111.0
The pkgdb must be updated.  Please run 'pkgdb -u' as root.
> su
Password:
% pkg_which /usr/local/lib/libavformat.so.52.111.0
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 475 packages found (-6 +7) (...)....... done]
?
% ls /usr/local/lib/libavformat.so.52.111.0
ls: /usr/local/lib/libavformat.so.52.111.0: No such file or directory
iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от AS

А Генту это, или нет, не важно.

Вообще-то важно

Хотя при сборке AFAIK проверяется наличие либы, но здесь ТС поймал баг.

Она не то что бы проверяется, она используется

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

Она не то что бы проверяется, она используется

У нас с Kroz спор возник за libavformat.so, а не libavformat.so.52, или, тем более, libavformat.so.52.111.0 какой-нибудь.

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

Ну дык. Значит при линковке SONAME не было. А в генте libavformat.so.52^W^W^W^W^W^W^WПеречитал пост, ето я не в тему морознул

vasily_pupkin ★★★★★
()
Последнее исправление: vasily_pupkin (всего исправлений: 1)

Так чё, дети капитана Гранта, это баг штоле?

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