windows下编译ffmpeg
2015-08-21 15:41
357 查看
环境配置
MinGW
全称叫Minimalist GNU for windows,是一套Windows环境下GNU编译组件的接口,通俗的可以说是Win上的gcc。比起MinGW,也许那只企鹅CygWin更加著名一些,但事实上两者是完全不同的东西。CygWin在Win上模拟一套Linux环境,使用Win的存储系统,编译的却是Linux环境下的程序,和虚拟机比较相似;MinGW则是完全的编译出Windows环境下的程序,换句话说,通过MinGW编译出来的exe是可以直接在explorer下双击运行的。从移植的角度上说,使用MinGW才能真正将一个Linux程序移植到Win,而CygWin不能。
MSYS
全称叫Minimal SYStem,是一套运行在Windows上的bash,也就是运行在Win上的Linux Terminal 。这个比较好理解,其实就是在Win上使用Linux的命令行进行操作,可以代替cmd来使用,通过手工修改安装目录下的etc/fstab来定位MinGW的目录。对一些GNU的开源软件,MSYS可能是必需的,因为它们通常需要./configure然后make才能运行。我们将MSYS和MinGW配合使用就可以打造出一个Win下的GNU命令行终端和编译系统。
mingw的下载地址为:http://sourceforge.net/projects/mingw,如mingw-get-setup.exe(版本为0.6.2-beta-2013.1004-1),双击运行,"MingGW Installation
Manager"界面出现后,选"Basic Setup",将右侧的选项全部选中,再点菜单“Installation”下的“Apply Changes”,到此开始装置文件,等安装完成后,到MingGW/msys/1.0/etc目录,直接复制fstab.sample出另一个文件fstab,打开到最后几行,在“/mingw”前写入mingw的安装路径,如"d:/mingw",这样目的是为msys指定mingw。
ffmpeg编译
到ffmpeg官网下载最新的源码,拷贝到C:\msys\1.0下。
双击msys.exe,输入lib.exe(此程序在VC的安装目录下,功能为把x.def文件解释称x.lib文件),link.exe,如果提示找不到,需要指定lib.exe跟link.exe及其依赖库的路径,如:export PATH=":C:\Program Files\Microsoft Visual Studio 8\VC\bin:$PATH"。接着按如下三步编译:
1 cd ./ff
./configure --enable-shared --disable-static --enable-memalign-hack
一些参数的说明,
./configure --help(先看看你想要配置啥的),
enable-memalign-hack 是指编译时,使用内存对齐方式,这样以便编译时用mmx或者sse指令对代码进行优化。
disable-debug 禁用调试符号。
--enable-gpl allow use of GPL code, the resulting libs,and binaries will be under GPL [no]
--enable-version3 upgrade (L)GPL to version 3 [no]
--enable-nonfree allow use of nonfree code, the resulting libs, and binaries will be unredistributable [no]
--disable-doc do not build documentation
--disable-yasm 如果没有yasm,可已去掉,
extra-cflags=-I /(依赖的头文件所在文件夹),
extra-ldflags=-L/(依赖的库文件所在文件夹),
--cpu=i686 得写上,要不会提示:Threading is enabled, but there is no implementation of atomic operations available,
--prefix = 你想安装到哪里,例如:--prefix=/usr/local,
不加--enable-w32threads开关时,出现如下错误:
In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/
pthread.h:288:0,
from libavcodec/pthread.c:32:
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/sched.h:152:53: error:
expected ')' before 'pid'
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/sched.h:154:53: error:
expected ')' before 'pid'
make: *** [libavcodec/pthread.o] Error 1
增加开关: --enable-w32threads,弃用pthread, 采用windows native thread, 问题消失(原因,可能安装MinGW时pthread包没有下好,下次重试看看。)
如果MinGW/msys没有安装pkg-config, configure 会抱错,但是不影响make。 解决的办法是下载pkg-config for MinGW/msys.
2 make
3 make install
到此编译完成,在local有生成的头文件,库。
遇到的问题
不生成LIB文件
第一步:发现生成了DLL,没有生成LIB,并有如下提示:“$ lib.exe /machine:i386 /def:libavformat/avformat-52.def /out:libavformat/avformat-52.lib
make: lib.exe:Command not found”。
很明显找不到"lib.exe"(此程序用来转def成lib),看来执行call ".../vcvars32.bat"并没有加载所需的路径(??),去VC安装目录下找“lib.exe”跟依赖的库“mspdb80.dll”,将这两个库,拷贝到“msys\1.0\bin”,在mingw命令行上输入“lib.exe”,发现已经不是“...Command not found”的提示了,说明已经能找到"lib.exe"了。
第二步:先试下“lib.exe”能不能用,执行“lib.exe /machine:i386 /def:libavformat/avformat-52.def /out:libavformat/avformat-52.lib”,发现有如下提示:“LINK: extra operand '/def:libavformat/avformat-52.def' TRY 'LINK --help' for more information”。可以看出是link.exe有问题,mingw下的link.exe支持并不是很完善,会导致编译失败或者有问题,因此从VC下找到“link.exe”并替换mingw下的(先备份),再执行刚才的命令,无错误提示。
第三步:用"lib.exe"一个一个生产lib太麻烦,直接依次执行:"make clean","make && make install",发现已经生成了lib文件。
运行ffmpeg.exe提示“丢失libiconv-2.dll”
解决方法:
去“http://www.gnu.org/software/libiconv/”下载库“libiconv-1.14.tar.gz”,放到home/dell下,解压,mingw命令行进入,依次执行“./configure make make install”即可。
不生成ffplay.exe的问题
解决方法:
如果不安装SDL的话,就不会生产ffmpeg.exe。SDL可以下载编译好的(见http://www.libsdl.org/download-1.2.php下的SDL-devel-1.2.15-mingw32.tar.gz),也可以自己编译(下载SDL-
1.2.15.tar.gz - GPG signed,解压后进入目录,执行configure && make && make install)。假设编译后生成的include(只含有*.h),lib,bin放在/local目录下。
在configure之前要先配置路径,如:export PATH="$PATH:/usr/local/bin:/usr/local/include:/usr/local/lib",
这样configure之后,"config.mak"会含有“HAVE_SDL=yes”,否则,如何找不到SDL的信息,就会含有“HAVE_SDL=no”,此后编译生成ffplay.exe。
MinGW
全称叫Minimalist GNU for windows,是一套Windows环境下GNU编译组件的接口,通俗的可以说是Win上的gcc。比起MinGW,也许那只企鹅CygWin更加著名一些,但事实上两者是完全不同的东西。CygWin在Win上模拟一套Linux环境,使用Win的存储系统,编译的却是Linux环境下的程序,和虚拟机比较相似;MinGW则是完全的编译出Windows环境下的程序,换句话说,通过MinGW编译出来的exe是可以直接在explorer下双击运行的。从移植的角度上说,使用MinGW才能真正将一个Linux程序移植到Win,而CygWin不能。
MSYS
全称叫Minimal SYStem,是一套运行在Windows上的bash,也就是运行在Win上的Linux Terminal 。这个比较好理解,其实就是在Win上使用Linux的命令行进行操作,可以代替cmd来使用,通过手工修改安装目录下的etc/fstab来定位MinGW的目录。对一些GNU的开源软件,MSYS可能是必需的,因为它们通常需要./configure然后make才能运行。我们将MSYS和MinGW配合使用就可以打造出一个Win下的GNU命令行终端和编译系统。
mingw的下载地址为:http://sourceforge.net/projects/mingw,如mingw-get-setup.exe(版本为0.6.2-beta-2013.1004-1),双击运行,"MingGW Installation
Manager"界面出现后,选"Basic Setup",将右侧的选项全部选中,再点菜单“Installation”下的“Apply Changes”,到此开始装置文件,等安装完成后,到MingGW/msys/1.0/etc目录,直接复制fstab.sample出另一个文件fstab,打开到最后几行,在“/mingw”前写入mingw的安装路径,如"d:/mingw",这样目的是为msys指定mingw。
ffmpeg编译
到ffmpeg官网下载最新的源码,拷贝到C:\msys\1.0下。
双击msys.exe,输入lib.exe(此程序在VC的安装目录下,功能为把x.def文件解释称x.lib文件),link.exe,如果提示找不到,需要指定lib.exe跟link.exe及其依赖库的路径,如:export PATH=":C:\Program Files\Microsoft Visual Studio 8\VC\bin:$PATH"。接着按如下三步编译:
1 cd ./ff
./configure --enable-shared --disable-static --enable-memalign-hack
一些参数的说明,
./configure --help(先看看你想要配置啥的),
enable-memalign-hack 是指编译时,使用内存对齐方式,这样以便编译时用mmx或者sse指令对代码进行优化。
disable-debug 禁用调试符号。
--enable-gpl allow use of GPL code, the resulting libs,and binaries will be under GPL [no]
--enable-version3 upgrade (L)GPL to version 3 [no]
--enable-nonfree allow use of nonfree code, the resulting libs, and binaries will be unredistributable [no]
--disable-doc do not build documentation
--disable-yasm 如果没有yasm,可已去掉,
extra-cflags=-I /(依赖的头文件所在文件夹),
extra-ldflags=-L/(依赖的库文件所在文件夹),
--cpu=i686 得写上,要不会提示:Threading is enabled, but there is no implementation of atomic operations available,
--prefix = 你想安装到哪里,例如:--prefix=/usr/local,
不加--enable-w32threads开关时,出现如下错误:
In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/
pthread.h:288:0,
from libavcodec/pthread.c:32:
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/sched.h:152:53: error:
expected ')' before 'pid'
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/sched.h:154:53: error:
expected ')' before 'pid'
make: *** [libavcodec/pthread.o] Error 1
增加开关: --enable-w32threads,弃用pthread, 采用windows native thread, 问题消失(原因,可能安装MinGW时pthread包没有下好,下次重试看看。)
如果MinGW/msys没有安装pkg-config, configure 会抱错,但是不影响make。 解决的办法是下载pkg-config for MinGW/msys.
2 make
3 make install
到此编译完成,在local有生成的头文件,库。
遇到的问题
不生成LIB文件
第一步:发现生成了DLL,没有生成LIB,并有如下提示:“$ lib.exe /machine:i386 /def:libavformat/avformat-52.def /out:libavformat/avformat-52.lib
make: lib.exe:Command not found”。
很明显找不到"lib.exe"(此程序用来转def成lib),看来执行call ".../vcvars32.bat"并没有加载所需的路径(??),去VC安装目录下找“lib.exe”跟依赖的库“mspdb80.dll”,将这两个库,拷贝到“msys\1.0\bin”,在mingw命令行上输入“lib.exe”,发现已经不是“...Command not found”的提示了,说明已经能找到"lib.exe"了。
第二步:先试下“lib.exe”能不能用,执行“lib.exe /machine:i386 /def:libavformat/avformat-52.def /out:libavformat/avformat-52.lib”,发现有如下提示:“LINK: extra operand '/def:libavformat/avformat-52.def' TRY 'LINK --help' for more information”。可以看出是link.exe有问题,mingw下的link.exe支持并不是很完善,会导致编译失败或者有问题,因此从VC下找到“link.exe”并替换mingw下的(先备份),再执行刚才的命令,无错误提示。
第三步:用"lib.exe"一个一个生产lib太麻烦,直接依次执行:"make clean","make && make install",发现已经生成了lib文件。
运行ffmpeg.exe提示“丢失libiconv-2.dll”
解决方法:
去“http://www.gnu.org/software/libiconv/”下载库“libiconv-1.14.tar.gz”,放到home/dell下,解压,mingw命令行进入,依次执行“./configure make make install”即可。
不生成ffplay.exe的问题
解决方法:
如果不安装SDL的话,就不会生产ffmpeg.exe。SDL可以下载编译好的(见http://www.libsdl.org/download-1.2.php下的SDL-devel-1.2.15-mingw32.tar.gz),也可以自己编译(下载SDL-
1.2.15.tar.gz - GPG signed,解压后进入目录,执行configure && make && make install)。假设编译后生成的include(只含有*.h),lib,bin放在/local目录下。
在configure之前要先配置路径,如:export PATH="$PATH:/usr/local/bin:/usr/local/include:/usr/local/lib",
这样configure之后,"config.mak"会含有“HAVE_SDL=yes”,否则,如何找不到SDL的信息,就会含有“HAVE_SDL=no”,此后编译生成ffplay.exe。
相关文章推荐
- HDU 5407 CRB and Candies (2015年多校比赛第10场)
- 字符、字符串、数组
- clojure编程-延迟计算
- 思科ACL通配符掩码的计算
- PAT 1056. Mice and Rice (25)
- Unity 5.0 2D (1)
- getRequestDispatcher()与sendRedirect()的区别
- java对redis的基本操作
- 图文详解如何在VMware Workstation11虚拟机上安装黑苹果Mac OS X 10.10系统
- swt学习相关文章
- MySql 5.6 数据单向同步详细步骤(亲测成功同步)
- 从@SuppressWarnings("finally")解析此批注
- 详细解读PHP的Yii框架中登陆功能的实现
- 升级Win10 Build 10525激活方面遇到的一些问题解答汇总
- android 状态栏背景最初透明,随着下滑恢复背景色
- SQL 中操作XML类型数据
- HDU 5414 CRB and string
- 阿里云,CentOS下yum安装mysql,jdk,tomcat
- Git 以分支的方式同时管理多个项目
- [Android]Android端ORM框架——RapidORM