2012-09-25 37 views
7

Tôi xây dựng ffmpeg bằng librtmp. Librtmp của tôi là/opt/librtmp/lib. Khi tôi thực hiện ffmpeg, nó nói:Cách thêm đường dẫn tìm kiếm thư viện được chia sẻ vào tệp thực thi?

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

tôi sử dụng ldd lệnh nó sẽ hiển thị không tìm thấy:

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

Tôi biết tôi như vậy tại:

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

Tôi tìm thấy một số các cách khắc phục sự cố

  • sửa đổi /etc/ld.so.conf, nhưng nó đòi hỏi người dùng bữa ăn tối
  • bộ biến LD_LIBRARY_PATH, nhưng nó không được conventient cho người dùng
  • qua rPath để gcc, như

cấu hình này args for my 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" 

Giả sử không có mã nguồn để biên dịch lại? Làm cách nào để thêm đường dẫn tìm kiếm thư viện được chia sẻ vào tệp thực thi?

+0

Tôi đã thực hiện một liên kết tượng trưng của /usr/lib/i486-linux-gnu/librtmp.so vào/usr/local/lib và ffmpeg chạy như một sự quyến rũ ... – Ice

Trả lời

3

Bạn có thể sử dụng addrpath để thêm RPATH vào tệp elf của mình.

RPATH sẽ hoạt động giống như LD_LIBRARY_PATH, nghĩa là, yêu cầu trình tải động tìm kiếm thư viện được chia sẻ trong đường dẫn đó. RPATH sẽ vĩnh viễn trong tệp ELF của bạn.

+1

Liên kết trong câu trả lời là đã chết - * quatramaran.ens. Không thể tìm thấy địa chỉ IP máy chủ của fr *. – Pang

1

Khắc phục sự cố của tôi đối với vấn đề này là cài đặt librtmp vào/usr/local/lib và chạy 'sudo ldconfig' sau khi cài đặt. Ffmpeg sau đó có thể được cấu hình đơn giản bằng cách thêm --enable-librtmp. Đối với tôi điều này hoạt động tốt: Không cần sửa đổi hệ thống!

3

Tôi nhận thấy rằng OP có thể đã chuyển sang nhưng đây là thứ mà NixOS thực hiện thường xuyên và họ đã phát hành một công cụ cho vấn đề này. Đây cũng là một vấn đề mà tôi có trước khi nghe NixOS.

Dưới đây là một ví dụ về việc sử dụng công cụ của họ patchelf

... Tương tự như vậy, bạn có thể thay đổi rPath, con đường tìm kiếm mối liên kết nhúng vào thực thi và thư viện động:

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

Điều này làm cho năng động liên kết để tìm kiếm trong /opt/my-libs/lib/foo/lib cho các thư viện được chia sẻ cần thiết theo chương trình ....

Từ https://nixos.org/patchelf.html

1

nixos

này có thể là nixos cụ nhưng cung cấp một cái nhìn sâu sắc thú vị trên ldd/patchelf:

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

ubuntu

trên ubuntu/fedora bạn sẽ sử dụng: LD_LIBRARY_PATH với tập lệnh khởi động ./ftl, một lần nữa, hãy xem bài đăng trên của tôi về FTL và cách triển khai nó.

Các vấn đề liên quan