windows下編譯 ffmpeg原始碼生成靜態庫用於Dev-C++工程
1 set-Up
1.1.下載ffmpeg原始碼ffmpeg-4.0.2.tar.bz2,http://ffmpeg.org/download.html 解壓到 D:\04_project\ffmpeg\ffmpeg-4.0.2
1.2下載mingw 安裝程式
mingw-get-setup.exe https://osdn.net/projects/mingw/releases/,
預設安裝到C:\MinGW
mingw安裝管理器可用於安裝和管理mingw和msys,但是這個版本的mingw不是我們編譯ffmpeg所需要的。mingw安裝管理器僅僅用來安裝msys。
把msys1.0的所有bin檔案都安裝一遍,如grep,iconv等。
1.3 解決pr和yasm命令沒有找到以及pkg-confg沒有找到
1.3.1 pr
pr command not found
下載地址 https://sourceforge.net/projects/gnuwin32/
安裝後從bin目錄複製pr.exe,libiconv2.dll,libintl3.dll到C:\MinGW\msys\1.0\bin
1.3.2 yasm
Yasm command not found http://yasm.tortall.net/Download.html,
將下載到的exe程式重新命名為yasm.exe,複製到C:\MinGW\msys\1.0\bin
1.3.3 pkg-config
pkg-config依賴glib和gettext-runtime
下載如下三個包glib, pkg-config, pkg-config-dev 解壓後將其中的exe和.dll全部拷貝到 to C:\MinGW\msys\1.0\bin
http://win32builder.gnome.org/packages/3.6/glib_2.34.3-1_win32.zip
http://win32builder.gnome.org/packages/3.6/pkg-config_0.28-1_win32.zip
http://win32builder.gnome.org/packages/3.6/pkg-config-dev_0.28-1_win32.zip
1.4下載MinGW-w64
下載檔案:i686-8.1.0-release-posix-dwarf-rt_v6-rev0,下載地址: https://sourceforge.net/projects/mingw-w64/files/
1.5.將MinGW-w64與msys關聯起來,MinGW-w64安裝目錄是:D:\01_tools\mingw-w64\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32
在C:\MinGW\msys\1.0\etc中使用notepad++開啟fstab檔案,在其中新增唯一一條對映:
D:\/01_tools\/mingw-w64\/i686-8.1.0-release-posix-dwarf-rt_v6-rev0\/mingw32 /mingw
注意:windows中要加上反斜槓。
2 使用msys和MinGW-w64編譯ffmpeg,生成.a的靜態庫,標頭檔案以及bin檔案
從C:\MinGW\msys\1.0\中開啟msys.bat進入msys終端;
cd d:
cd 04_project/ffmpeg/ffmpeg-4.0.2/ffmpeg-4.0.2
./configure --prefix=/d/01_tools/mingw-w64/i686-8.1.0-release-posix-dwarf-rt_v6-rev0/mingw32/i686-w64-mingw32
其中prefix的值是MinGW-64安裝目錄中的i686-w64-mingw32。在1.1中下載解壓出來的ffmpeg-4.0.2原始碼目錄中執行configure
make
make install
lib中得到靜態庫和pkgconfig:
include中得到標頭檔案
3 在dev-c++中使用ffmpeg的靜態庫
我們編譯ffmpeg提供的example中的muxing.c
3.1 建立工程
a. 新建一個控制檯c程式工程
b. 在工具->編譯器選項中新建一個編譯器new1
編譯example用到的編譯器是我們編譯ffmpeg所使用的編譯器 D:\01_tools\mingw-w64\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32
如下是編譯器的配置:
c 配置專案屬性
開啟專案->專案屬性,在引數->連結中填入一下靜態庫:
-lavformat
-lavcodec
-lswresample
-lavutil
-lswscale
-pthread
-lm
-lz
-lsecur32
-lws2_32
-liconv
-lole32
-luser32
-lbcrypt
到目前為止,我們缺少兩個庫
libconv.a和libz.a
d 編譯 libconv.a
下載libconv的原始碼
https://ftp.gnu.org/pub/gnu/libiconv/
下載libiconv-1.15
將下載的原始碼目錄複製到mysy的home目錄中,例如C:\MinGW\msys\1.0\home\cheny,“cheny”是當前使用者。
在msys終端中執行如下命令:
./configure --prefix=/c/MinGW/msys/1.0/lib/libconv
make
make install
將編譯好的庫和標頭檔案目錄新增到專案屬性的檔案/目錄中。
e 編譯libz.a
下載原始碼地址:http://gnuwin32.sourceforge.net/packages/zlib.htm
複製zlib-1.2.3目錄到C:\MinGW\msys\1.0\home\cheny
cd到zlib-1.2.3,執行如下命令:
cp win32/Makefile.gcc .
make -f Makefile.gcc
export "INCLUDE_PATH=/c/MinGW/msys/1.0/lib/zlib/include"
export "LIBRARY_PATH=/c/MinGW/msys/1.0/lib/zlib/lib"
export "BINARY_PATH=/c/MinGW/msys/1.0/lib/zlib/bin"
make install -f makefile.gcc
將編譯好的庫和標頭檔案目錄新增到專案屬性的檔案/目錄中。
f 編譯工程
成功得到exe程式,在不需要avcodec-58.dll/avfilter-7.dll/avdevice-58.dll/avformat-58.dll/avutil-56.dll等動態連結庫的情況下也可以執行程式。