WINDOWS 下編譯 ffmpeg 原始碼總結

2021-09-26 10:09:09 字數 2179 閱讀 1802

windows 下編譯 ffmpeg 原始碼,有兩種方式:vc、gcc

1、vc 編譯:

2、gcc 編譯:

一:自己動手,豐衣足食

windows 下 gcc 編譯當然用 msys2 。因為用 msys2 編譯 ffmpeg 比較容易。如果不需要第三方庫的支援:

./configure

或者./configure --enable-gpl --enable-version3 --enable-nonfree

或者 (靜態庫編譯)

./configure --enable-gpl --enable-version3 --enable-nonfree --disable-shared --enable-static

或者 (動態庫編譯)

./configure --enable-gpl --enable-version3 --enable-nonfree --disable-static --enable-shared

msys2(gcc) 靜態編譯時,因為 msys2 優先會查詢 .dll.a 檔案,如果存在,會進行動態鏈結。

所以如果有靜態庫的情況下,可以將 .dll.a 檔案刪除或重新命名為 .dll.a.bak。

讓 msys2 找不到動態庫,只能用靜態庫鏈結了(mingw64\lib 目錄和 mingw32\lib 目錄)。

libgcc_s_dw2-1.dll、libgomp-1.dll 等 gcc 系統的 dll ,可以將 

mingw32\lib\gcc\i686-w64-mingw32\9.2.0

和mingw64\lib\gcc\x86_64-w64-mingw32\9.2.0

目錄下的 .dll.a 重新命名為 .dll.a.bak,就可以了。

libwinpthread-1.dll.a  在 目錄 mingw64\x86_64-w64-mingw32\lib 下(x64),和 mingw32\i686-w64-mingw32\lib 下(x86)。

(前提你編譯的靜態庫中,不能呼叫了這些 gcc 系統 dll 中的函式,必須是靜態呼叫)

推薦用第三種方式編譯。解決了網路問題,就沒有什麼問題了。

編譯一次2-3個小時。動態庫、靜態庫、x86、x64一起編譯,那就要10個小時了。

睡一覺,早晨起床就編譯好了。豈不妙哉。

3、vc + gcc 混合編譯:

上面的 gcc 編譯已經很不錯了,為什麼要執著用 vc 編譯呢?

因為有 vside 整合開發環境,修改除錯非常方便。宇宙人都知道。

ffmpeg 是支援 vc 編譯的。加引數 --toolchain=msvc 就可以了(具體如何整,自行搜尋)。

關鍵是第三方庫的編譯。ffmpeg 又支援眾多的第三方庫。

因為 ffmpeg 是用 gcc 來檢查依賴關係、第三方庫支援的,所以 msys2(gcc) 是必須的。

我們要用 vc 來編譯 ffmpeg ,所以在 msys2 中第三方庫就不編譯了,直接安裝就好了(沒有的,才編譯)。

因為實際上我們也不會使用 gcc 裡面的庫,只是 ffmpeg 檢查依賴時會用到。

現在,如果需要在 ffmpeg 中,啟用某個第三方庫,首先在 msys2 中安裝好這個庫。然後在用 vc 編譯這個庫。

兩個都弄好之後,就可以在 ffmpeg 編譯中,啟用這個第三方庫,並且使用 vc 編譯。

編譯檢查用 gcc 中的第三方庫的標頭檔案、庫檔案,

實際編譯原始碼、連線用的是 vc 編譯好的第三方庫的標頭檔案、庫檔案。交叉混合編譯了。

這裡有個細節要注意,路徑問題。標頭檔案、庫檔案搜尋路徑。

編譯檢查用的是 gcc,必須指向 msys2 目錄;這個是預設的,不用設定。

編譯原始碼、連線用的是 vc 的,必須指向你編譯好的第三方庫的目錄。

你自己用 vc 編譯的第三方庫,標頭檔案、庫檔案最好統一放在乙個目錄下。

將 msys2 中,lib 目錄下的 pkgconfig 目錄複製到你的 vc 第三方庫的 lib 目錄下。

你必須在編譯引數中,新增搜尋標頭檔案、庫檔案的目錄引數(vc的)。

Linux centos編譯安裝ffmpeg

系統環境 centos release 6.7 final 編譯安裝ffmpeg yum install y autoconf automake cmake freetype devel gcc gcc c git libtool make mercurial nasm pkgconfig zlib...

Windows下的ffmpeg編譯

網上有很多版本的ffmpeg編譯指南,大部分不可用,不是鏈結失效,就是不符合我的應用需求。自己整理乙份留作備份 如果沒有這一步操作,在後面編譯ffmpeg的過程中,可能會提示找不到yasm命令。ffmpeg裡面的彙編加速部分的 需要用到它,如果禁用彙編加速,會影響編譯出來的編譯碼庫的執行效率。4 通...

在Windows下編譯OpenSSL

如何在windows下編譯openssl vs2005使用vc8的cl編譯器 1 安裝activeperl 初始化的時候,需要用到perl直譯器 2 使用vs2005下的visual studio 2005 command prompt進入控制台模式 這個模式會自動設定各種環境變數 3 解壓縮ope...