1. 程式人生 > >windows下編譯 ffmpeg原始碼生成靜態庫用於Dev-C++工程

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 使用msysMinGW-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等動態連結庫的情況下也可以執行程式。