Mục tiêu của tôi là xây dựng một nhị phân FFmpeg tĩnh duy nhất với libfdkaac và x264 hỗ trợ cho OSX và Linux. Đầu tiên, tôi đã cố gắng xây dựng một cái trên OSX, tôi làm theo hướng dẫn trên web FFmpeg: https://trac.ffmpeg.org/wiki/CompilationGuide/MacOSX
Đây là cài đặt cấu hình tôi đã áp dụng để xây dựng nhị phân tĩnh:
./configure pkg_config='pkg-config --static' --prefix=/usr/local --extra-version=ntd_20150126 --disable-shared --enable-static --enable-gpl --enable-pthreads --enable-nonfree --enable-fontconfig --enable-libfreetype --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-filters --enable-runtime-cpudetect
Sau quá trình xây dựng, FFmpeg khoảng 14Mb, có nghĩa là nó không bao gồm các thư viện của bên thứ ba. Trong thực tế, nó đòi hỏi phải liên kết đến các thư viện động nằm ở /usr/local/lib
. Nếu tôi loại bỏ các lib động đó, FFmpeg sẽ hiển thị một lỗi như:
dyld: Library not loaded: /usr/local/lib/libSDL-1.2.0.dylib
Referenced from: /usr/local/bin/ffmpeg
Reason: image not found
Trace/BPT trap: 5
Đây có phải là cách đúng đắn để biến tất cả các thư viện bên ngoài thành nhị phân tĩnh đơn?
Tôi sẽ thực sự đánh giá cao sự giúp đỡ của bạn!
ldd
lệnh, để hiển thị các phụ thuộc thư viện động của tệp nhị phân? Hay chỉ là một file
lệnh với đầu ra bao gồm liệu một nhị phân được liên kết tĩnh hay động?
--disable-shared --enable-static
nên tạo một nhị phân tĩnh. Tôi nghĩ rằng nó làm trên Linux, hoặc khi biên dịch chéo cho các cửa sổ. Vì vậy, nó có vẻ như là một lỗi trong tập lệnh xây dựng ffmpeg trên OS X
--enable-static
không tạo các nhị phân tĩnh. Nó làm cho các libav*
thư viện được xây dựng bởi ffmpeg (và được sử dụng bởi các nhị phân) tĩnh hay không. Nó không làm cho ffmpeg sử dụng các phiên bản tĩnh của các thư viện bên ngoài. Vì vậy, những gì bạn đang thấy là hành vi tiêu chuẩn cho ffmpeg.