平台特定資訊

目錄

1 類 Unix 系統

FFmpeg 的某些部分無法使用 GNU 組譯器 2.15 版本建置,該版本仍由少數 AMD64 發行版提供。為了確保您的編譯器在 binutils 升級後確實使用所需版本的 gas,請執行

$(gcc -print-prog-name=as) --version

如果沒有,那麼您應該安裝一個不同的編譯器,該編譯器沒有 gas 的硬編碼路徑。在最壞的情況下,傳遞 --disable-asm 給 configure。

1.1 進階連結設定

如果您靜態編譯了 FFmpeg 函式庫,並且想要使用它們來建置您自己的共享函式庫,您可能需要強制 PIC 支援 (在 FFmpeg configure 期間使用 --enable-pic) 並將以下選項添加到您的專案 LDFLAGS

-Wl,-Bsymbolic

如果您的目標平台需要位置無關執行檔,您應該將正確的連結旗標 (例如 -pie) 傳遞給 --extra-ldexeflags

1.2 BSD

BSD make 無法建置 FFmpeg,您需要安裝並使用 GNU Make (gmake)。

1.3 (Open)Solaris

建置 FFmpeg 需要 GNU Make,因此您必須調用 (gmake),標準 Solaris Make 無法運作。當使用非 c99 前端 (gcc, generic suncc) 建置時,由於 libc 預設不符合 c99 標準,請將 --extra-libs=/usr/lib/values-xpg6.o--extra-libs=/usr/lib/64/values-xpg6.o 添加到 configure 選項。configure 執行的探測可能會引發異常,由於系統 shell 中的錯誤,導致 configure 本身終止。只需直接調用不同的 shell (例如 bash) 即可解決此問題

bash ./configure

1.4 Darwin (Mac OS X, iPhone)

Xcode 提供的工具鏈足以建置基本的非加速程式碼。

PowerPC 或 ARM (iPhone) 上的 Mac OS X 需要來自 https://github.com/FFmpeg/gas-preprocessorhttps://github.com/yuvi/gas-preprocessor (目前已過時) 的預處理器,以建置最佳化的組譯函數。將 Perl 腳本放在您 PATH 中的某處,FFmpeg 的 configure 將會自動選取它。

amd64 和 x86 上的 Mac OS X 需要 nasm 來建置大多數最佳化的組譯函數。FinkGentoo PrefixHomebrewMacPorts 可以輕鬆提供它。

2 DOS

基於各種原因,建議使用交叉編譯器。http://www.delorie.com/howto/djgpp/linux-x-djgpp.html

3 OS/2

有關在 OS/2 上編譯 FFmpeg 的資訊,請參閱 http://www.edm2.com/index.php/FFmpeg

4 Windows

4.1 使用 MinGW 或 MinGW-w64 進行原生 Windows 編譯

FFmpeg 可以建置為在使用 MinGW-w64 工具鏈的 Windows 上原生執行。從 http://msys2.github.io/ 和/或 http://mingw-w64.sourceforge.net/ 安裝最新版本的 MSYS2 和 MinGW-w64。您可以在下載區和常見問題解答中找到詳細的安裝說明。

注意事項

  • 不建議為 MSYS 環境建置,MSYS2 通過 mingw64_shell.batmingw32_shell.bat 提供完整的 MinGW-w64 環境,應該使用它來代替 msys2_shell.bat 提供的環境。
  • 通過在 Makefile 中禁用隱含規則,可以通過調用 make -r 而不是普通的 make 來加速使用 MSYS2 進行建置。對於正常的一次性建置,這種加速幾乎不存在,並且僅在第二次運行 make 時 (例如在 make install 期間) 才明顯。
  • 為了編譯 FFplay,您必須安裝 SDLpkg-config 的 MinGW 開發函式庫。
  • 通過在配置 FFmpeg 時使用 ./configure --enable-shared,您可以將 FFmpeg 函式庫 (例如 libavutil、libavcodec、libavformat) 建置為 DLL。

4.1.1 使用 MSYS2 進行原生 Windows 編譯

MSYS2 MinGW-w64 環境通過 pacman 提供隨時可用的工具鏈和依賴項。

請確保使用 mingw64_shell.batmingw32_shell.bat 以獲得正確的 MinGW-w64 環境。預設安裝在 MinGW-w64 Win64 ShellMinGW-w64 Win32 Shell 下提供它們的快捷方式。

# normal msys2 packages
pacman -S make pkgconf diffutils

# mingw-w64 packages and toolchains
pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2

若要以 32 位元為目標,請在上面的命令中將 x86_64 替換為 i686

4.2 適用於 Windows 的 Microsoft Visual C++ 或 Intel C++ 編譯器

FFmpeg 可以使用 MSVC 2013 或更高版本建置。

您將需要以下先決條件

  • MSYS2
  • NASM (也可通過 MSYS2 的套件管理器取得。)

若要在 MSYS2 中設定正確的環境,您需要從 Visual Studio 或 Intel Compiler 命令提示字元執行 msys_shell.bat

nasm.exe 放置在您 PATH 中的某處。

接下來,請確保您要使用的任何其他標頭和函式庫 (例如 zlib) 都位於編譯器可以看見的位置。通過修改 LIBINCLUDE 環境變數以包含這些目錄的 Windows 樣式路徑來執行此操作。或者,您可以嘗試使用 --extra-cflags/--extra-ldflags configure 選項。

最後,執行

For MSVC:
./configure --toolchain=msvc

For ICL:
./configure --toolchain=icl

make
make install

如果您希望編譯共享函式庫,請將 --enable-shared 添加到您的 configure 選項。請注意,由於 MSVC 和 ICL 處理 DLL 匯入和匯出的方式,您無法同時編譯靜態和共享函式庫,並且啟用共享函式庫將自動禁用靜態函式庫。

注意事項

  • 如果您希望建置 zlib 支援,您將必須從某處獲取相容的 zlib 二進制檔案,以及 MSVC 匯入函式庫,或者如果您希望靜態連結,您可以按照以下說明使用 MSVC 建置相容的 zlib.lib。無論您使用哪種方法,您仍然必須遵循步驟 3,否則編譯將會失敗。
    1. 獲取 zlib 原始碼
    2. 編輯 win32/Makefile.msc,使其使用 -MT 而不是 -MD,因為這也是建置 FFmpeg 的方式。
    3. 編輯 zconf.h 並移除其對 unistd.h 的包含。這在建置 FFmpeg 時會被錯誤地包含進來。
    4. 執行 nmake -f win32/Makefile.msc
    5. zlib.libzconf.hzlib.h 移動到 MSVC 可以看見的某處。
  • FFmpeg 已在 i686 和 x86_64 上使用以下項目進行測試
    • Visual Studio 2013 專業版和快速版
    • Intel Composer XE 2013
    • Intel Composer XE 2013 SP1

    任何其他項目均未獲得官方支援。

4.2.1 使用 Microsoft Visual C++ 連結 FFmpeg

如果您計劃與 MSVC 建置的靜態函式庫連結,您需要確保在專案設定中將 Runtime Library 設定為 Multi-threaded (/MT)

您需要將 inline 定義為 MSVC 可以理解的內容

#define inline __inline

另請注意,如 Microsoft Visual C++ 中所述,您將需要與 MSVC 相容的 inttypes.h

如果您計劃使用 dlltool 建立的匯入函式庫,則必須在連結器最佳化設定下將 References 設定為 No (/OPT:NOREF),否則產生的二進制檔案在運行時將會失敗。使用 lib.exe 產生的匯入函式庫時,則不需要這樣做。此問題已在上游報告,網址為 http://sourceware.org/bugzilla/show_bug.cgi?id=12633

若要建立與 /OPT:REF 選項 (預設在發布模式下啟用) 搭配使用的匯入函式庫,請按照以下步驟操作

  1. 開啟Visual Studio 命令提示字元

    或者,在一般的命令列提示字元中,調用 vcvars32.bat,它會設定 Visual C++ 工具的環境變數 (此檔案的標準位置類似於 C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat)。

  2. 進入儲存已建立的 LIB 和 DLL 檔案的 bin 目錄。
  3. 使用 lib.exe 產生新的匯入函式庫。
    lib /machine:i386 /def:..\lib\foo-version.def  /out:foo.lib
    

    foo-versionfoo 替換為各自的函式庫名稱。

4.3 使用 Linux 進行 Windows 跨平台編譯

您必須使用 http://www.mingw.org/ 提供的 MinGW 跨平台編譯工具。

然後使用以下選項配置 FFmpeg

./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-

(您可以根據為 MinGW 工具選擇的前綴更改 cross-prefix)。

然後您可以使用 Wine 輕鬆測試 FFmpeg。

4.4 在 Cygwin 下編譯

請使用 Cygwin 1.7.x,因為過時的 1.5.x Cygwin 版本在其 C 函式庫中缺少 llrint()。

安裝包含所有 "Base" 套件以及以下 "Devel" 套件的 Cygwin。

binutils, gcc4-core, make, git, mingw-runtime, texinfo

為了運行 FATE,您還需要以下 "Utils" 套件。

diffutils

如果您想使用其他函式庫建置 FFmpeg,請從任何 Cygwin 套件儲存庫下載適用於 Ogg 和 Vorbis 的 Cygwin "Devel" 套件。

libogg-devel, libvorbis-devel

這些函式庫套件僅可從 Cygwin Ports 取得。

libSDL-devel, libgsm-devel, libmp3lame-devel,
speex-devel, libtheora-devel, libxvidcore-devel

對於 x264 的建議是從原始碼建置它,因為它的發展速度太快,Cygwin Ports 無法及時更新。

4.5 在 Cygwin 下進行 Windows 跨平台編譯

使用 Cygwin,您可以建立不需要 cygwin1.dll 的 Windows 二進制檔案。

只需按照先前說明安裝您的 Cygwin,再加上這些額外的 "Devel" 套件即可。

gcc-mingw-core, mingw-runtime, mingw-zlib

並將一些特殊旗標添加到您的 configure 調用中。

對於靜態建置,請運行

./configure --target-os=mingw32 --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin

而對於使用共享函式庫的建置

./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin

本文件於 2025 年 1 月 21 日 使用 makeinfo 生成。

託管服務由 telepoint.bg 提供。