2012-09-25 108 views
7

我使用librtmp構建ffmpeg。我的librtmp位於/ opt/librtmp/lib。當我執行FFmpeg的,它說:如何將共享庫搜索路徑添加到可執行文件?

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

我用ldd命令會顯示沒有發現

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

我知道我這樣的:

[[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 

我發現了幾個解決問題的方法

  • 修改/etc/ld.so.conf中,但它需要一個用戶晚飯
  • 集LD_LIBRARY_PATH變量,但它不conventient用戶
  • 通rpath的到GCC,這樣

配置我的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" 

ARGS假設沒有源代碼重新編譯?如何將共享庫搜索路徑添加到可執行文件?

+0

我做了/usr/lib/i486-linux-gnu/librtmp.so到/ usr/local/lib中的符號鏈接,並且ffmpeg像魅力一樣運行... – Ice

回答

3

您可以使用addrpath爲您的精靈文件添加RPATH。

RPATH將像LD_LIBRARY_PATH一樣工作,即告訴動態加載程序搜索該路徑中的共享庫。 RPATH將永久保存在您的ELF文件中。

+1

Link in answer is dead - * quatramaran.ens。 fr的服務器IP地址找不到*。 – Pang

1

我對這個問題的解決方法是將librtmp安裝到/ usr/local/lib並在安裝後運行'sudo ldconfig'。 然後可以通過簡單地添加--enable-librtmp來配置Ffmpeg。 對我來說這工作得很好:沒有必要的系統修改!

3

我意識到OP可能已經移動,但這是NixOS經常做的事情,他們已經爲此問題發佈了一個工具。這也是我在聽到NixOS之前遇到的問題。

這裏是他們的工具的例子使用patchelf

... 同樣,你可以改變RPATH,嵌入可執行文件和動態庫鏈接器的搜索路徑:

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

這將導致動態鏈接器在/opt/my-libs/lib/foo/lib中搜索程序所需的共享庫....

https://nixos.org/patchelf.html

相關問題