2012-09-25 6 views
7

Ich baue die ffmpeg mit librmp. Mein librtmp ist unter/opt/librmp/lib. Wenn ich die ffmpeg ausführen, hieß es:Wie fügt man den Suchpfad einer shared library zu einer ausführbaren Datei hinzu?

./ffmpeg: error while loading shared libraries: librtmp.so.0: cannot open shared object file: No such file or directory 

Ich benutze ldd Kommando es zeigt nicht gefunden:

[[email protected] bin]# ldd ffmpeg 
     linux-vdso.so.1 => (0x00007fff15576000) 
     librtmp.so.0 => not found 
     libz.so.1 => /lib64/libz.so.1 (0x00002b9a71e10000) 
     libm.so.6 => /lib64/libm.so.6 (0x00002b9a72025000) 
     libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b9a722a8000) 
     libc.so.6 => /lib64/libc.so.6 (0x00002b9a724c3000) 
     /lib64/ld-linux-x86-64.so.2 (0x00002b9a71bf2000) 

weiß, dass ich meine so an:

[[email protected] bin]# ls -alh /opt/librtmp/lib/ 
total 300K 
drwxr-xr-x 3 root root 4.0K Sep 25 17:10 . 
drwxr-xr-x 7 root root 4.0K Sep 25 17:10 .. 
-rw-r--r-- 1 root root 158K Sep 25 17:10 librtmp.a 
lrwxrwxrwx 1 root root 12 Sep 25 17:10 librtmp.so -> librtmp.so.0 
-rwxr-xr-x 1 root root 118K Sep 25 17:10 librtmp.so.0 
drwxr-xr-x 2 root root 4.0K Sep 25 17:10 pkgconfig 

ich einige gefunden Möglichkeiten, das Problem zu beheben

  • ändern /etc/ld.so.conf, aber es benötigt, um ein Abendessen Benutzer
  • Satz Variable LD_LIBRARY_PATH, aber es ist conventient nicht an Benutzer
  • Pass rpath zu gcc, wie diese

configure args für meine ffmpeg

PKG_CONFIG_PATH="/opt/librtmp/lib/pkgconfig" ./configure --disable-doc \ 
--disable-ffserver --disable-avdevice \ 
--disable-postproc --disable-avfilter --disable-bsfs \ 
--disable-filters \ 
--disable-asm \ 
--disable-bzlib \ 
--enable-librtmp \ 
--prefix=/opt/ffmpeg \ 
--extra-ldflags="-Wl,-rpath,/opt/librtmp/lib" 

Angenommen, es gibt keine Quellcode neu zu kompilieren? Wie fügen Sie den Suchpfad für die gemeinsame Bibliothek zu einer ausführbaren Datei hinzu?

+0

Ich habe einen Symlink von /usr/lib/i486-linux-gnu/librtmp.so in/usr/local/lib und ffmpeg läuft wie ein Charme ... – Ice

Antwort

3

Sie könnten addrpath verwenden, um einen RPATH zu Ihrer Elf-Datei hinzuzufügen.

Der RPATH funktioniert wie LD_LIBRARY_PATH, dh er weist den dynamischen Lader an, nach den gemeinsam genutzten Bibliotheken in diesem Pfad zu suchen. RPATH wird dauerhaft in Ihrer ELF-Datei gespeichert.

+1

Link in Antwort ist tot - * quatramaran.ens. Die Server-IP-Adresse von fr wurde nicht gefunden *. – Pang

1

Meine Lösung für dieses Problem ist die Installation von librmp in/usr/local/lib und die Ausführung von 'sudo ldconfig' nach der Installation. Ffmpeg kann dann einfach durch Hinzufügen von --enable-librmp konfiguriert werden. Für mich funktioniert das gut: Keine Systemänderungen notwendig!

3

Ich weiß, dass OP wahrscheinlich weitergezogen ist, aber das ist die Art von Sache, die NixOS regelmäßig macht und sie haben ein Werkzeug für dieses Problem veröffentlicht. Auch das war ein Problem, das ich hatte, bevor ich überhaupt von NixOS hörte.

Hier ist ein Beispiel für die Verwendung ihres Werkzeugs patchelf

... Ebenso Sie den RPATH Pfad des Linker Suche in ausführbaren Dateien eingebettet ändern können, und dynamische Bibliotheken:

patchelf --set-rpath /opt/my-libs/lib:/foo/lib program 

Dies bewirkt, dass die dynamischen Linker zum Suchen in /opt/my-libs/lib und /foo/lib für die vom Programm benötigten gemeinsamen Bibliotheken ....

Von https://nixos.org/patchelf.html

1

NixOS

diese könnte NixOS spezifische sein, sondern bietet einen interessanten Einblick auf ldd/patchelf:

https://lastlog.de/blog/posts/playing_FTL_on_NIXOS.html

ubuntu

auf ubuntu/Filzhut Sie würden verwenden: LD_LIBRARY_PATH mit einem Starter-Skript ./ftl, wieder, siehe meine obige Veröffentlichung über FTL und wie es eingesetzt wird.