Jak sprawdzić, czy biblioteka współdzielona jest zainstalowana?

14

Moje pytanie wynika z mojego problemu z uruchomieniem ffmpeg. Zainstalowałem ffmpeg i jest on wyświetlany jako zainstalowany:

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

Później zorientowałem się, że niektóre programy zależą od bibliotek, które nie są dostarczane z samą instalacją, więc sprawdziłem za pomocą komendy ldd, czego brakuje:

# 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)

Jak się okazuje moja ffmpeg jest odcięta od 7 bibliotek, też działa. Najpierw pomyślałem, że każda z tych bibliotek musi być zainstalowana, ale później zorientowałem się, że niektóre lub wszystkie mogą być zainstalowane, ale ich lokalizacja nie jest znana ffmpeg. Przeczytałem, że /etc/ld.so.conf i /etc/ld.so.cache zawierają ścieżki do bibliotek, ale byłem zdezorientowany, ponieważ była tylko jedna linia w

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

ale bardzo długo /etc/ld.so.cache.

Jestem teraz w punkcie, w którym czuję się zagubiony, jak badać dalej. Może być pomocny następny krok, aby dowiedzieć się, w jaki sposób mogę ustalić, czy dana biblioteka jest rzeczywiście zainstalowana, nawet jeśli jej lokalizacja jest nieznana dla 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:
Abdul Al Hazred
źródło
Jaka jest twoja dystrybucja / system operacyjny? Czy jest jakiś powód, dla którego nie używasz ffmpeg z twojej dystrybucji?
Faheem Mitha
Używam mennicy Linuxa o nazwie Rebecca, ffmpeg nie był jeszcze zainstalowany w mojej dystrybucji, kiedy próbowałem zainstalować go przez „apt-get install ffmpeg” okazało się, że nie było ffmpeg (tylko słowo kluczowe w innych programach), dodałem repozytorium, w którym został dołączony i mógł go zainstalować, ale po tym, jak „ldd / usr / bin / ffmpeg” odkryłem, że w ffmpeg brakuje niektórych bibliotek, próbowałem zainstalować te biblioteki, wpisując ich nazwy w apt-get, ale nie można ich znaleźć w ten sposób.
Abdul Al Hazred
Wystarczy powiedzieć, że ffmpeg może być prawdziwym problemem w instalacji. Lepiej jest użyć instalacji statycznej z git. Oto taki, który został stworzony przez uprzejmą duszę, aby ocalić cię przed bólami głowy: johnvansickle.com/ffmpeg
Baazigar
Byłoby to pomocne, gdybyś powiedział nam, z którego repozytorium go zainstalowałeś. :-) Czy możesz również wkleić dane wyjściowe apt-get -f installdo swojego pytania? Uwaga: Ubuntu jest oparty na Ubuntu 14.04, więc możesz tam zajrzeć, jeśli ffmpeg nie jest zawarty w twojej dystrybucji.
Faheem Mitha
Nie pamiętam nazwy repozytorium, ale było to tak, jak nazwisko kończące się synem, kiedy próbowałem znaleźć je w /etc/apt/sources.list /etc/apt/sources.list.d /
Abdul Al Hazred

Odpowiedzi:

5

Poszukaj w tych bibliotekach / usr / lib i / usr / lib64. Jeśli zauważysz, że brakuje jednego z ffmpeg, dowiązaj go symbolicznie, aby istniał w innym katalogu.

Możesz także uruchomić wyszukiwanie dla „libm.so.6” i sprawdzić, gdzie znajduje się ten plik. Istnieje duża szansa, że ​​ffmpeg szuka w tych samych katalogach brakujących. Umieść je tam, gdy je znajdziesz.

Jeśli nie istnieją na twoim serwerze, zainstaluj pakiet, który je zawiera. Jeśli są zawarte w pakiecie ffmpeg, ale ich nie widać, spróbuj ponownie zainstalować ffmpeg.

Baazigar
źródło
Więc jeśli nie istnieje w / usr / lib lub / usr / lib64, to zdecydowanie nie jest zainstalowany w 100 procentach?
Abdul Al Hazred
Jeśli nie istnieje w / usr / lib lub / usr / lib64, najprawdopodobniej nie jest zainstalowany. Instalacja ffmpeg może być bardzo trudna, aby ffmpeg działał zgodnie z oczekiwaniami, często potrzebujesz ffmpeg i czegoś innego. Czasami liczne „coś innego”. Zdecydowanie zalecam stosowanie kompilacji statycznej, chyba że wolisz cierpieć z powodu ręcznej instalacji, co jest zrozumiałe.
Baazigar
Nie wiem, co to jest kompilacja statyczna ....
Abdul Al Hazred
1
Kompilacja statyczna oznacza, że ​​ffmpeg i powiązane narzędzia zostały skompilowane, aby wszystkie działały razem z jednego katalogu. Kiedy używasz git do ściągania tego na serwer, masz wszystko w tym jednym miejscu, więc nie ma mowy o bibliotekach ani niczym innym. Wszystko jest w jednym „pudełku”, że tak powiem, wszystko, co musisz zrobić, to ustawić na to swoje wytyczne. Tutaj możesz przeczytać więcej na ten temat i zdobyć: johnvansickle.com/ffmpeg
Baazigar
27

Możesz użyć:

ldconfig -p | grep libavfilter

Jeśli nie ma biblioteki wyjściowej, nie jest zainstalowana. Nie jestem pewien, czy jest to w 100% wiarygodne.
Przynajmniej na stronie man ldconfigdla opcji -p:

Wydrukuj listy katalogów i bibliotek kandydujących przechowywane w bieżącej pamięci podręcznej.

taliezin
źródło
1

Użyj polecenia, file `which ffmpeg`aby ustalić, czy ffmpegjest kompilowany dla wersji 64-bitowej czy 32-bitowej. Jeśli jest 64-bitowy, poszukaj bibliotek w /usr/lib64. Jeśli jest 32-bitowy, poszukaj bibliotek w /usr/lib. Jeśli ffmpegjest statycznie powiązany, to nie ma znaczenia ... nie będzie korzystał z żadnych bibliotek współdzielonych, a dane wyjściowe również fileto powiedzą.

Nie łącz symbolicznie bibliotek między /usr/libi /usr/lib64. To ci nie pomoże, ponieważ program 64-bitowy będzie potrzebował bibliotek 64-bitowych (znajduje się w /usr/lib64), a program 32-bitowy będzie potrzebował bibliotek 32-bitowych (znajduje się w /usr/lib32).

Jeśli biblioteki nie istnieją na twoim serwerze, zainstaluj pakiet, który je udostępnia (upewnij się, że wybierasz pakiet 32-bitowy, jeśli ffmpeg to 32-bit itp.).

gmorganVA
źródło