1. 程式人生 > >MinGW下編譯ffmpeg靜態庫給Visual C++使用

MinGW下編譯ffmpeg靜態庫給Visual C++使用

本文地址: blog.csdn.net/wangjia184/article/details/7931164

首先推薦 http://ffmpeg.zeranoe.com/builds/, 這裡已經有編譯好的動態連線庫。可惜上面沒靜態連結庫。我也試過 DLL2Lib, 但是無法連線LIBCMT庫,只能使用MSVCRT

所以一定要靜態庫的話只能自己編譯了。在Windows上用MinGW編譯真是個痛苦的過程,沒有yum install和apt-get,所有的依賴項要自己找全。

廢話少說,下面是編譯過程,記錄於此。

準備

首先 下載安裝 MinGW, 比較讚的是,現在它提供自動化的安裝配置程式,相比以前大大簡化了安裝過程,連fstab都幫你配置了。

安裝完成後編輯 MinGW\msys\1.0\msys.bat 批處理, 在檔案最前面加入一行,呼叫 Visual Studio的 vcvarsall.bat 批處理設定環境變數

call  "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"

本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

接著在MinGW的下載站點上 下載安裝 g++,我下載的版本是4.6.2,覆蓋到MinGW目錄即可.


然後下載 yasm Win32 版本,將檔案重新命名並分別複製2份到 MinGW\bin\yasm.exe
和 MinGW\bin\nasm.exe , 後面很多編譯的專案依賴於它們.

執行msys.bat, 在命令列視窗中切換到打算編譯的目錄。比如我的在L盤, 則使用 cd /L/ 進入, 其它檔案命令與Linux一致。

準備活動到此結束,下面就開始漫長的編譯過程了。

本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

編譯依賴項(下面的版本號是我編譯的時候的版本號,不一定必須是這個版本號)

1. Zlib 1.2.7

cd zlib-1.2.7/
make -f win32/Makefile.gcc
cp -iv zlib1.dll /mingw/bin
cp -iv zconf.h zlib.h /mingw/include
cp -iv libz.a /mingw/lib
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
2. libgsm 1.0.13-3
cd gsm/
make

編譯到一半的時候出現 fchmod 和 fchown 的編譯錯誤,不管它,繼續執行:

mkdir /mingw/include/gsm
cp inc/gsm.h /mingw/include/gsm
cp lib/libgsm.a /mingw/lib

本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
3. LAME 3.99.5
./configure --prefix=/mingw --enable-expopt=full
make
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
4. LIBOGG 1.3.0
./configure --prefix=/mingw
make
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

5. LIBVorbis 1.3.3

./configure --prefix=/mingw
make
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

6. LIBSpeex 1.2rc1

./configure --prefix=/mingw
make
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

7. LIBTheora 1.1.1

./configure --prefix=/mingw
make
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

8. FAAC 1.28

首先編輯 Makefile.am 檔案,將第一行 改為 

SUBDIRS = include libfaac

然後修改configure.in檔案, 找到最後一段的 AC_OUTPUT, 修改為

AC_OUTPUT(libfaac/Makefile include/Makefile Makefile)

執行:

./configure --prefix=/mingw
make
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

9. xvidcore 1.3.2

cd xvidcore/build/generic
./configure --prefix=/mingw

執行到這裡後,搜尋xvidcore/build/generic 目錄下面所有檔案中的 -mno-cygwin 這個選項, 這個選項已經不被GCC支援,全部刪除後繼續。
make
make install
cp -iv \=build/xvidcore.dll.a /mingw/lib/libxvidcore.dll.a
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

10. x264 snapshot-20120830-2245

configure --prefix=/mingw --enable-win32thread --extra-cflags="-DX264_VERSION=20100422"
make
make install
cp -iv x264.h x264_config.h /mingw/include
cp -iv libx264.a /mingw/lib
cp -iv x264.pc /mingw/lib/pkgconfig
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

編譯ffmpeg 0.11.1

相信有耐心進行到這裡的人,已經花了1-2個小時了,這是正常的速度。終於可以編譯ffmpeg了.

下載原始碼,http://ffmpeg.org,解壓後首先配置,光這個自動配置過程也要十分鐘左右。
./configure --prefix=/mingw --enable-gpl --enable-nonfree --enable-postproc --enable-avfilter --enable-w32threads --enable-runtime-cpudetect --enable-memalign-hack --enable-bzlib --enable-libfaac --enable-libgsm --enable-libmp3lame --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --disable-debug

然後 make & make install 等著編譯結束吧。本文地址: http://blog.csdn.net/wangjia184/article/details/7931164

連結

連結靜態庫需要注意連結的順序, 我的VC版本是VS2010
#ifdef __cplusplus
extern "C" {
#endif

#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavutil/avutil.h>
#include <libswscale/swscale.h>

#ifdef __cplusplus
}
#endif
#pragma comment( lib, "libgcc.a")
#pragma comment( lib, "libmingwex.a")
#pragma comment( lib, "libcoldname.a")
#pragma comment( lib, "libavcodec.a")
#pragma comment( lib, "libavformat.a")
#pragma comment( lib, "libavutil.a")
#pragma comment( lib, "libswscale.a")
#pragma comment( lib, "libz.a")
#pragma comment( lib, "libfaac.a")
#pragma comment( lib, "libgsm.a")
#pragma comment( lib, "libmp3lame.a")
#pragma comment( lib, "libogg.a")
#pragma comment( lib, "libspeex.a")
#pragma comment( lib, "libtheora.a")
#pragma comment( lib, "libvorbis.a")
#pragma comment( lib, "libvorbisenc.a")
#pragma comment( lib, "libx264.a")
#pragma comment( lib, "xvidcore.a")
#pragma comment( lib, "wsock32.lib")
#pragma comment( lib, "vfw32.lib")
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164