win7 X64 编译ffmpeg
来源:互联网 发布:砺剑出题 网络 编辑:程序博客网 时间:2024/06/10 19:12
由于FFMpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,
因此它不能使用MSVC++编译。要想使用FFMpeg,最先要解决的问题就是在Windows下配置一个类似Linux的编译环境,
将FFMpeg编译为二进制库以后,再利用其进行进一步开发。MSVC++并不严格的遵循C标准,所以整个编译过程必须使用MSys+MinGW系统来完成。
如果选择编译动态链接库(dll),这些库将和其他的动态链接库一样在使用上没什么差别,可以使用MSVC++来链接这些库到自己的程序,只有这种情况下MSVC++是被支持的。
一、编译过程
1、准备MSys+MinGW系统
下载整合版 Download mingw-get-setup.exe (86.5 kB)
之前编译c++ 时用过,http://blog.csdn.net/kuaile123/article/details/11024873
不多说了,安装目录里 C:\MinGW\msys\1.0 就是 MSys
2、修改“msys.bat”
用文本编辑器(如NotePad++)打开C:\MinGW\msys\1.0\msys.bat,由于打算用MSVC++编译程序,所以需要有.lib文件才能链接到FFmpeg的库,这些.lib文件可以使用微软的工具链中lib命令产生。把下面一行加到msys.bat的最前面,把路径替换成机器上vcvars32.bat实际存在的路径,比如我的在“D:\Program Files\Microsoft Visual Studio2010\VC\bin”,于是就添加:
call "D:\Program Files\Microsoft Visual Studio2010\VC\bin\vcvars32.bat"
3、下载ffmpeg源码
由于ffmpeg的源代码存放在SVN仓库里,所以必须使用命令行程序或是图形界面程序来访问。
首先下载TortoiseSVN,安装完成后,在想要存放ffmpeg下邮件,选择check out,输入地址svn://svn.mplayerhq.hu/ffmpeg/trunk
点击开始,开始下载,如下图所示:我下载的版本40多M,网速不好的时候下载很容易中断。
4、编译
首先运行msys.bat,进入shell界面
转到ffmpeg所在目录: cd D:/ffmpeg
注意:目录名使用正斜杠来分割,而不是Windows所使用的反斜杠(比如说要写成"D:/ffmpeg"而不是"D:\ffmpeg")。
文件名或目录名中如果带有空格,必须用双引号括起(例如这样"/C/Program Files",带有双引号)。
不然会提示没有此目录
盘符(例如"C:\")可以从根目录处访问(像这样"/C/")。
(1) 编译静态库
(1.1)配置:
./configure --enable-static --enable-memalign-hack --prefix=C:/MinGW/msys/1.0 --extra-cflags="-fno-common"
注意执行这句话时出现的问题,yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE。
这个过程要花费较长的时间,开始会有较长的时间没有反应。其中的prefix是msys的安装路径
如果出现提示: yasm not found, use --disable-yasm for a crippled build
解决方法(a)在网上下载一个yasm.exe并安装在mingw/bin下面,编译代码时你注意看,会发现asm后缀的文件用的编译器是yasm,c文件用的是gcc;
下载地址 http://yasm.tortall.net/Download.html 注意把下载下来的改名为 yasm.exe ,不然还是提示找不到。由于mingw为32位版本,最好下32位,以后后面有问题。
(b)不使用汇编指令,在配置时加上,即./configure --disable-yasm
(1.2)编译:make
(1.3)安装: make install
安装只是把要开发使用的库文件拷贝到c:/msys/1.0/lib/目录中,头文件拷贝到c:/msys/1.0/include/目录中。产生的库文件为.a文件
(2)编译动态库
如果希望使用FFmpeg包含的libavcodec库开发多媒体文件处理程序,还需要编译libavcodec的dll动态链接库。
(2.1)配置:
./configure --enable-shared --disable-static --enable-memalign-hack --prefix=C:/MinGW/msys/1.0 --extra-cflags="-fno-common"
(2.2)编译:
make
注意:当运行到make这一步时出现问题:
c:\mingw\include\io.h: error : unknown typename 'off64_t'
make: ***[libavformat/applehttp.o] error1
发现在io.h中已经
/* MSVC's io.h contains the stuff from dir.h, so I will too. * NOTE: This also defines off_t, the file offset type, through * an inclusion of sys/types.h */#include <sys/types.h>/* To get time_t. */
在sys/types.h 文件中有如下一段:
#ifndef _OFF64_T_#define _OFF64_T_typedef __int64 _off64_t;#ifndef __STRICT_ANSI__typedef __int64 off64_t;#endif /* __STRICT_ANSI__ */#endif /* ndef _OFF64_T */
已经定义了off64_t,特别奇怪,不知道为啥没法识别。
不管我是加了 #undef _OFF64_T_ 还是 将周围的变量注释掉 只保留 typedef __int64 _off64_t; typedef __int64 off64_t;
都会出现更多的错,我以为是64位系统的原因,但是我又在32位电脑上进行编译,同样的问题,不知道这是什么原因。在网上查也没有人有这种问题,太奇怪了。
参考博客:http://blog.csdn.net/dragon101788/article/details/8679092
- win7 X64 编译ffmpeg
- win7(x64)编译ffmpeg
- ubuntu1604 X64 编译 ffmpeg
- Openssl WIN7 x64编译
- Windows(x64)编译FFMPEG
- WIN7 X64 GDAL GEOS 编译
- WIN7-x64 VS2008 编译libthrift
- Windows(x64)编译FFMPEG-2.0.1
- Windows(x64)编译FFMPEG-2.0.1
- WIN7+Cygwin+NDK+ffmpeg编译
- Win7 64位ffmpeg编译
- Win7下WinGW+Msys安装编译ffmpeg
- win7用mingw编译ffmpeg+x264总结
- win7下编译android版ffmpeg
- Win7 64位下用MSVC2013 编译 ffmpeg
- mingw+msys编译FFMPEG库 win7
- ffmpeg 在win7 QT mingw下编译
- win7 64位专业版下的x64编译问题
- android之来电自动拒接并自动回复短信_上课模式app
- 斐波那契(Fibonacci)数列
- java基础整理十二(多线程2)
- 初窥Linux 之 我最常用的20条命令
- 反射基础
- win7 X64 编译ffmpeg
- iptables
- iOS平台FFmpeg编译测试运行(备忘)
- spring中mvc拦截器应用实例
- 第三天:软件随想录看完
- c#与数据库连接
- 【疑问解答】如何从文件中按照规则读入数字
- 新的篇章:来自鲍尔默和艾洛普的公开信
- RF+Selenium2Library+Sikuli集成环境搭建