Как проверить, установлена ​​ли общая библиотека?

14

Мой вопрос возник из-за моей проблемы с запуском ffmpeg. Я установил ffmpeg, и он отображается как установленный:

whereis ffmpeg 
ffmpeg: /usr/bin/ffmpeg /usr/bin/X11/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz

Позже я выяснил, что некоторые программы зависят от библиотек, которые не поставляются с самой установкой, поэтому я проверил с помощью команды ldd, чего не хватает:

# ldd /usr/bin/ffmpeg
    linux-vdso.so.1 =>  (0x00007fff71fe9000)
    libavfilter.so.0 => not found
    libpostproc.so.51 => not found
    libswscale.so.0 => not found
    libavdevice.so.52 => not found
    libavformat.so.52 => not found
    libavcodec.so.52 => not found
    libavutil.so.49 => not found
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5f20bdf000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5f209c0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5f205fb000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5f20f09000)

Как оказалось мой ffmpeg отрезан от 7 библиотек тоже работает. Сначала я подумал, что каждая из этих библиотек должна быть установлена, но потом я понял, что некоторые или все могут быть установлены, но их расположение неизвестно ffmpeg. Я прочитал, что /etc/ld.so.conf и /etc/ld.so.cache содержат пути к библиотекам, но я был сбит с толку, потому что была только одна строка в

/etc/ld.so.conf
 cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

но очень долго /etc/ld.so.cache.

Сейчас я нахожусь в такой ситуации, когда я чувствую себя потерянным, как проводить дальнейшие исследования. Следующим шагом может оказаться полезным выяснить, как я могу определить, действительно ли установлена ​​данная библиотека, даже если ее местоположение неизвестно ffmpeg.

---------Output---of----apt-cache-policy-----request---------
apt-cache policy
Package files:
 100 /var/lib/dpkg/status
     release a=now
 500 http://archive.canonical.com/ubuntu/ trusty/partner Translation-en
 500 http://archive.canonical.com/ubuntu/ trusty/partner i386 Packages
     release v=14.04,o=Canonical,a=trusty,n=trusty,l=Partner archive,c=partner
     origin archive.canonical.com
 500 http://archive.canonical.com/ubuntu/ trusty/partner amd64 Packages
     release v=14.04,o=Canonical,a=trusty,n=trusty,l=Partner archive,c=partner
     origin archive.canonical.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/universe Translation-en
 500 http://security.ubuntu.com/ubuntu/ trusty-security/restricted Translation-en
 500 http://security.ubuntu.com/ubuntu/ trusty-security/multiverse Translation-en
 500 http://security.ubuntu.com/ubuntu/ trusty-security/main Translation-en
 500 http://security.ubuntu.com/ubuntu/ trusty-security/multiverse i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=multiverse
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/universe i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=universe
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/restricted i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=restricted
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/main i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=main
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/multiverse amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=multiverse
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/universe amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=universe
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/restricted amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=restricted
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=main
     origin security.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/restricted Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/multiverse Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/multiverse i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=multiverse
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=universe
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/restricted i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=restricted
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=main
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/multiverse amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=multiverse
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=universe
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/restricted amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=restricted
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=main
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/universe Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty/restricted Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty/multiverse Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty/main Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty/multiverse i386 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=multiverse
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/universe i386 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=universe
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/restricted i386 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=restricted
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/main i386 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=main
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/multiverse amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=multiverse
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=universe
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/restricted amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=restricted
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=main
     origin archive.ubuntu.com
 700 http://extra.linuxmint.com/ rebecca/main i386 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=main
     origin extra.linuxmint.com
 700 http://extra.linuxmint.com/ rebecca/main amd64 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=main
     origin extra.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/import i386 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=import
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/upstream i386 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=upstream
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/main i386 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=main
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/import amd64 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=import
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/upstream amd64 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=upstream
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/main amd64 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=main
     origin packages.linuxmint.com
Pinned packages:
Абдул Аль Хазред
источник
Какой у вас дистрибутив / ОС? Есть ли какая-то причина, по которой вы не используете ffmpeg из своего дистрибутива?
Фахим Митха
Я использую кодовое имя Linux mint Rebecca, ffmpeg еще не был установлен в моем дистрибутиве, когда я попытался установить его с помощью «apt-get install ffmpeg», оказалось, что ffmpeg не было (только ключевое слово в других программах), я добавил репозиторий, где он был включен и мог установить его, но после того, как «ldd / usr / bin / ffmpeg» обнаружил, что в ffmpeg отсутствуют некоторые библиотеки, я попытался установить эти библиотеки, введя их имена в apt-get, но их не удалось найти таким образом.
Абдул Аль Хазред
Просто сказать, ffmpeg может быть реальной болью в заднице для установки. Лучше использовать статическую установку из git. Вот один , который был создан доброй душой , чтобы спасти вас от головной боли: johnvansickle.com/ffmpeg
Baazigar
Было бы полезно, если бы вы сказали нам, из какого репозитория вы его установили. :-) Кроме того, вы можете вставить вывод apt-get -f installв ваш вопрос, пожалуйста? Примечание: Ubuntu основан на Ubuntu 14.04, так что вы можете посмотреть, если ffmpeg не включен в ваш дистрибутив.
Фахим Митха
Я не могу вспомнить имя репозитория, но это было похоже на имя фамилии, оканчивающейся на «сын», когда я попытался найти его в /etc/apt/sources.list /etc/apt/sources.list.d /
Абдул Аль Хазред

Ответы:

5

Посмотрите в / usr / lib и / usr / lib64 эти библиотеки. Если вы обнаружите, что ffmpeg отсутствует, вставьте символическую ссылку, чтобы он существовал в другом каталоге.

Вы также можете запустить поиск для libm.so.6 и посмотреть, где находится этот файл. Существует большая вероятность, что ffmpeg ищет в том же каталоге и отсутствующие. Симлинк их там, когда найдешь.

Если они не существуют на вашем сервере, установите пакет, который включает их. Если они включены в пакет ffmpeg, но вы их не видите, попробуйте переустановить ffmpeg.

Baazigar
источник
Так что, если он не существует в / usr / lib или / usr / lib64, он определенно не установлен на 100%?
Абдул Аль Хазред
Если он не существует в / usr / lib или / usr / lib64, он, скорее всего, не установлен. Установка ffmpeg может быть очень сложной, чтобы заставить ffmpeg работать так, как ожидают люди, вам часто требуется ffmpeg и что-то еще. Иногда многочисленные «что-то еще». Я настоятельно рекомендую использовать статическую сборку, если вы не хотите страдать от ручной установки, что понятно.
Баазигар
Я не знаю, что такое статическая сборка ....
Абдул Аль Хазред
1
Статическая сборка означает, что ffmpeg и связанные инструменты были скомпилированы для совместной работы только из одного каталога. Когда вы используете git, чтобы перенести это на свой сервер, у вас есть все в одном месте, так что нет никаких сомнений в отношении библиотек или чего-либо еще. Все в одном «ящике», так сказать, все, что вам нужно сделать, это установить свои директивы, чтобы указывать на него. Здесь вы можете прочитать больше о нем и получить его: johnvansickle.com/ffmpeg
Baazigar
27

Ты можешь использовать:

ldconfig -p | grep libavfilter

При отсутствии выходной библиотеки не устанавливается. Я не уверен, что это на 100% надежно.
По крайней мере, на странице man ldconfigдля опции -p:

Распечатайте списки каталогов и библиотек-кандидатов, хранящиеся в текущем кэше.

taliezin
источник
1

Используйте команду, file `which ffmpeg`чтобы определить, ffmpegскомпилирован ли он для 64-битной или 32-битной версии . Если он 64-битный, ищите библиотеки в /usr/lib64. Если он 32-битный, ищите библиотеки в /usr/lib. Если ffmpegон статически связан, то это не имеет значения ... он не будет использовать какие-либо разделяемые библиотеки, и результат fileтакже скажет вам об этом.

Не символически связывайте библиотеки между /usr/libи /usr/lib64. Это не поможет вам, потому что 64-битной программе потребуются 64-битные библиотеки (находятся в /usr/lib64), а 32-битной программе понадобятся 32-битные библиотеки (находятся в /usr/lib32).

Если на вашем сервере нет библиотек, установите пакет, который их предоставляет (убедитесь, что вы выбрали 32-битный пакет, если ffmpeg 32-битный и т. Д.).

gmorganVA
источник