2012-03-08 36 views
5

Tôi đang biên soạn FFmpeg từ nguồn.

./configure --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-x11grab --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 
make 
make install 

ldd /usr/local/bin/ffmpeg đã cho tôi này

linux-gate.so.1 => (0xb7717000) 
libavdevice.so.53 => not found 
libavfilter.so.2 => not found 
libavformat.so.54 => not found 
libavcodec.so.54 => not found 
libpostproc.so.52 => not found 
libswresample.so.0 => not found 
libswscale.so.2 => not found 
libavutil.so.51 => not found 
libm.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libm.so.6 (0xb76e3000) 
libpthread.so.0 => /lib/i386-linux-gnu/tls/i686/nosegneg/libpthread.so.0 (0xb76ca000) 
libc.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6 (0xb7569000) 
/lib/ld-linux.so.2 (0xb7718000) 

Thiết $LD_LIBRARY_PATH để /usr/local/lib sửa "không tìm thấy" lỗi, nhưng vì những lý do nêu here, tôi không muốn thiết lập $LD_LIBRARY_PATH permanantly.

Tôi được lập lại với cùng một lệnh, lần này với $LD_RUN_PATH được đặt thành /usr/local/lib.
make dường như đã bỏ qua $LD_RUN_PATH khi biên soạn.

Có cách nào để sử dụng $LD_RUN_PATH mà không thực hiện các thay đổi sâu rộng đối với Makefile không?

+0

bạn có thể liên kết thành công bằng tay (tức là trên dòng lệnh, mà không sử dụng make)? – Beta

+0

Tôi không biết. Làm thế nào tôi có thể kiểm tra điều đó? – htoip

+0

Bạn có thể chỉ cho chúng tôi một phần của makefile thực thi 'ldd/usr/local/bin/ffmpeg' không? – Beta

Trả lời

5

Bạn có lý do để biên dịch nhị phân trong chế độ được chia sẻ (như muốn xây dựng phần mềm để liên kết với chúng) không? Nếu nhị phân 'ffmpeg' tĩnh sẽ hoạt động tốt cho bạn, hãy định cấu hình mà không có tùy chọn --enable-shared để loại bỏ các phụ thuộc này.

Nếu không, bạn sẽ cần phải cho hệ thống biết nơi thư viện được chia sẻ trực tiếp, bằng cách đặt LD_LIBRARY_PATH trong môi trường, tiền tố thực thi 'ffmpeg' với LD_LIBRARY_PATH (ví dụ: "LD_LIBRARY_PATH =/usr/local/lib/usr"/local/bin/ffmpeg ") hoặc cập nhật đường dẫn thư viện của hệ thống của bạn với đúng vị trí.

Có một giải pháp khác nằm ở cuối trang bạn đã liên kết trong bài đăng của mình: "LDFLAGS = '- L/my/strange/path/lib -Wl, -rpath/my/strange/path/lib '". Đối với FFmpeg và đối với trường hợp của bạn, hãy chuyển thông số bổ sung này vào thời gian định cấu hình:

--extra-ldflags="-L/usr/local/lib -Wl,-rpath /usr/local/lib" 

Và nhị phân 'ffmpeg' sẽ biết nơi để tìm thư viện được chia sẻ.

Nhiều giải pháp cho vấn đề này.

+0

Tôi không biết liệu tôi có cần tùy chọn được chia sẻ hay không nhưng hướng dẫn sử dụng là gì. '--extra-ldflags' hoạt động hoàn hảo. – htoip

2

Đối với bất kỳ ai khác tình cờ gặp vấn đề này, lý do $LD_RUN_PATH không hoạt động có thể là do this bug với trình liên kết vàng.

(Cách giải quyết là sử dụng rPath như mô tả trong câu trả lời của Mike)

2
  1. lẽ Hầu hết LD_RUN_PATH bị bỏ qua vì ./configure gói của đã đặt một số -Wl, tùy chọn -rpath trong cmdline mối liên kết của (thẳng thắn tôi không biết bản thân mình. Tôi thấy hành vi tương tự ở đây nhưng tôi đang biên dịch chéo từ 486 đến mips32).

  2. thử chạy định cấu hình như sau: ./configure LDFLAGS = "- L/your/lib -Wl, -rpath-link =/your/lib" CPPFLAGS = "- I/your/include" --prefix =/tgt ...

    tôi khuyên bạn nên sử dụng -rpath-liên kết thay vì -rpath nếu/thư mục của bạn là khác nhau từ/tgt

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