前言
由于工作需要,最近在看ffmpeg方面的东西,在linux下编译安装还好一些,在win下实在是比较麻烦,不过还好最后都通过了。现在记录一下,方便有需要的朋友,也方便自己以后查看。
本人机器环境:Win7 64位
一、安装MinGW+Msys
mingw的全称叫MinimalistGNU for windows,是一套Windows环境下GNU编译组件的接口,通俗的可以说是Win上的gcc 。比起MinGW,也许那只企鹅CygWin更加著名一些,但事实上两者是完全不同的东西。CygWin在Win上模拟一套Linux环境,使用Win的存储系统,编译的却是Linux环境下的程序,和虚拟机比较相似;MinGW则是完全的编译出Windows环境下的程序,换句话说,通过MinGW编译出来的exe是可以直接在explorer下双击运行的。从移植的角度上说,使用MinGW才能真正将一个Linux程序移植到Win,而CygWin不能。
msys的全称叫MinimalSYStem,是一套运行在Windows上的bash,也就是运行在Win上的Linux Terminal 。这个比较好理解,其实就是在Win上使用Linux的命令行进行操作,可以代替cmd来使用。对一些GNU的开源软件,MSYS可能是必需的,因为它们通常需要./configure然后make才能运行(学Linux的童鞋应该非常熟悉这个流程了)。我们将MSYS和MinGW配合使用就可以打造出一个Win下的GNU命令行终端和编译系统。
有一点需要说明的是,MinGW是MSYS都是一套组件而不是一个单独的程序。我们需要下载两者的各组件的压缩包来完成安装和配置。组件的意义在于,我们可以下载需要的部分来配置一个想要的系统,比如不搞编译器设计的童鞋可能不需要flex和bison组件(用来词法和语法分析的),而automake工具也可以在需要的时候才安装,这类似于Linux下环境的配置。知道了这些,我们就可以开始MinGW和MSYS的安装了。
第一次安装WinGW+Msys时推荐选择网址http://www.mingw.org/wiki/Getting_Started作为参考。下载 mingw-get-setup.exe并安装,路径为默认路径,可自动下载选中的组件包。安装完成后配置环境变量,我的路径为;C:\MinGW\bin;C:\MinGW\msys\1.0\bin
二、编译ffmpeg
在官网http://ffmpeg.zeranoe.com/builds/下载最新的ffmpeg源码。
启动msys,路径为C:\MinGW\msys\1.0\msys.bat,在shell上的提示符如下:
Administrator@WHH-PC~
$
输入cd命令进入ffmpeg源码放置目录,编译一般是三个步骤,配置、编译、安装
如果是改变编译方式,则还要在配置之前先clean.
1、 编译静态库
1) 配置
在shell提示符下输入:
./configure - -enable-static - -enable-memalign-hack - -prefix=c:/MinGW/msys/1.0 - -extra-cflags=”-fno-common”
这个过程需要几分钟时间,开始会有较长时间没有反应,如果没有错误提示则耐心等待。其中prefix是ffmpeg编译后bin和include安装路径
在该过程中可能会提示没有yasm,此时有两种解决方法:
a. 在configure后加入- -disable-yasm
b. yasm:http://yasm.tortall.net/下载,并改名为yasm.exe,复制到:c:/MinGW/msys/1.0/bin目录下
2) 编译
make
3) 安装
make install
安装只是把要开发使用的库文件copy到c:/MinGW/msys/1.0/lib/目录下,头文件copy到c:/MinGW/msys/1.0/include目录中。产生的库文件为.a文件。
2、 编译动态库
动态库和静态库只在配置上有差别,配置如下:
./configure --enable-shared --disable-static --enable-memalign-hack --prefix= c:/MinGW/msys/1.0 - -extra-cflags=”-fno-common”
后面的步骤则同上。
在开始编译之前,可以把原来编译的目标文件清除掉:
make distclean
至此,ffmpeg编译完成,可以在前面设置的安装目录查看生成的库文件和头文件。
三、编译examples
在shell提示符下进入c:/MinGW/msys/1.0/share/ffmpeg/examples
输入make,如无问题则编译成功,查看生成的可执行文件。
在这一步我遇到问题,描述如下:
提示没有找到pkg-config。
经上网查找原来还需要再安装pkg-config和依赖库glib.
1、下载 pkg-config-0.23-2.zip 及 glib_2.18.4-1_win32.zip
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip
http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18/glib_2.18.4-1_win32.zip
把 glib_2.18.4-1_win32.zip 中的 libglib-2.0-0.dll 与 pkg-config.exe放在同一目录,或者放在 $path 目录下 .我是放在C:\MinGW\bin目录下。
3、 设置环境变量
export PKG_CONFIG=/c/mingw/bin/pkg-config.exe
exportPKG_CONFIG_PATH=/c/mingw/msys/1.0/lib/pkgconfig:/usr/local/lib/pkgconfig
然后再次make
编译成功。