`

Windows7 MSYS+MinGW 编译 FFMPEG

阅读更多
学习需要,在Windows下编译FFMPEG源文件,网上原帖或者转载的方法很多,不过有很多问题,解决的方法当然目前在国内很少,FFMPEG论坛里面也没有多少活跃的人,唉,经过3天的努力,终于在尝试了几次不同的方法之后,得到了一种在Windows下能够正常编译FFMPEG的方法,很多是因为软件或者脚本版本不对,这尼玛怎么改,太坑爹了,现将自己的方法贴到下面。附件中是我打包的文件,可以使用

原帖地址:http://blog.csdn.net/jszj/article/details/4028716


由于工作原因,需要使用ffmpeg在windows下进行代码跟踪
于是,上网找相关文章,搜索出来有很多,经过查看,其中的一个英文网站是最好的,网址:
http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page
上面有详细说明整个过程,但为了防止此网站不能访问的问题,这里特把一般步骤写下来,以做个记录。后面会说明我在按照上面说的步骤进行的过程中遇到困难的解决方法。

说明:
A. 在后面叙述的过程中,可能需要有支持7z压缩格式的解压缩软件,最新的winrar应该就是支持的
B. 以下的步骤,只是真对ffmpeg编译,所以涉及到无关的部分,本文不会关心它们,除非有特别说明

1. 下载ffmpeg源代码,下载网址:svn://svn.mplayerhq.hu/ffmpeg/trunk
首先需要安装svn客户端,我用的是TortoiseSVN,应该是可以很方便地从网上下载,下载之后安装。
安装之后,在你要保存ffmpeg源代码的位置上点右键,然后选择check out,输入以上的网址,包括前面的“svn:”,然后点OK按钮,它会把整个源代码下到本地,根据网速,可能几秒钟到几十分钟不等。源代码30M左右

2. 安装windows下的编译系统
2.1 安装MSys
首先下载以下软件:
MSYS-1.0.11-2004.04.30-1.exe
MSYS-1.0.11-20080821-dll.tar.gz
bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2
make-3.81-MSYS-1.0.11-2.tar.bz2

安装MSYS-1.0.11-2004.04.30-1.exe 的最后会出现一个dos窗口,大意是让用户选择是否让msys自己提交install,输入n后回车,以表示我们不允许msys自己进行这个操作。
为了方便后面的叙述,我们假设msys安装到了默认的目录c:/msys/1.0下

解压MSYS-1.0.11-20080821-dll.tar.gz 到c:/msys/1.0下,覆盖原目录
解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 后,从解压出的目录中,bin下拷贝sh.exe到c:/msys/1.0/bin下,如果原来存在,则覆盖之,这个解压后的目录可以删除(注:我还将bash.exe 一起拷贝到了该目录下)
解压 coreutils,然后拷贝解压出来的 coreutils-5.97/bin/pr.exe 到c:/msys/1.0/bin中
解码make-3.81-MSYS-1.0.11-2.tar.bz2 到c:/msys/1.0下,如果有文件存在,则覆盖它们
为了产生正确的库文件,需要修改c:/msys/1.0/msys.bat:
使用记事本打开该文件,然后在其最开始处添加:
call "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin/vcvars32.bat"
注意:这一行必需处在此文件的最开始处(我把它放到除去rem开头之外的最前面还是不能正常工作,不知道为啥),同时修改你的vc路径,我的是vs2008,所以是9.0,此修改指定vc的vcvars32.bat文件位置并招待它
如果是你的os是64位的,还需要对该文件的 _WindowsNT 处进行修改,紧跟这一行的下面一行添加:
rem Hopefully a temporary workaround for getting MSYS shell to run on x64
rem (WoW64 cmd prompt sets PROCESSOR_ARCHITECTURE to x86)
if not "x%PROCESSOR_ARCHITECTURE%" == "xAMD64" goto _NotX64
set COMSPEC=%WINDIR%/SysWOW64/cmd.exe
%COMSPEC% /c %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EOF
:_NotX64


关于64位的部分,我没有试,只不过是直接从说明处到拷贝过来

2.2 安装MinGW
下载以下6个安装包:
· binutils-2.18.50-20080109-2.tar.gz
· mingwrt-3.15.1-mingw32-dll.tar.gz
· mingwrt-3.15.1-mingw32-dev.tar.gz
· w32api-3.13-mingw32-dev.tar.gz

gcc-core-3.4.5-20060117-1.tar.gz
gcc-g++-3.4.5-20060117-1.tar.gz
下载后解压以上6个到c:/msys/1.0/mingw中,如果有重复的,则覆盖掉
另外gcc编译器也可以选择4.2.1版本的:
gcc-core-4.2.1-sjlj-2.tar.gz
gcc-g++-4.2.1-sjlj-2.tar.gz
但在解压之后,需要进行改名:
c++-sjlj.exe to c++.exe
cpp-sjlj.exe to cpp.exe
g++-sjlj.exe to g++.exe
gcc-sjlj.exe to gcc.exe
我用的是3.4.5的,所以我的不需要改名

2.3 整合MinGW 和 msys系统
这一步非常简单,修改c:/msys/1.0/etc/fstab.sample的名称为:fstab,即把括展名直接去掉,然后用记事本打开,修改
c:/mingw /mingw

c:/msys/1.0/mingw /mingw
然后保存即可。
修改的内容应该是自己的安装路径

到此,所有的系统已全部完成。在该网站上,还有说明上面安装的软件包的版本问题,这部分不再翻译,直接拷贝到如下:

Get the most up-to-date MSys+MinGW system.
Today (November 29, 2008), that includes:
· make
The version of make that is installed by default will not work for FFmpeg. You will have to upgrade.
make must be MSYS make version => 3.81
Preferably version 3.81-2.
Also do not get MinGW make. Get MSYS make.


· Mingw runtime
Must be version => 3.15
Note: if any older version is used, everything will still build and link fine, but non numeric AVOptions will not work in ffmpeg (-flags, etc.)


· w32api
Should be version => 3.13
Note: if any older version is used, you will have to --disable-devices while configuring FFmpeg, and vfwcap will not be compiled in.


· bash
Must be version => 2.05b to build FFmpeg.
Preferably version 3.1 to build most other external libraries.


· binutils
do not use binutils-2.15.91-20040904-1. It is known to not link properly.
(2.17 recommended by Gianluigi Tiesi)

3. 编译ffmpeg
这部分我不清楚里面的很多选项,我只是照着步骤在做
有两个编译方式,一个是静态库,一个是动态库。
首先启动msys,
c:/msys/1.0/msys.bat
在shell上的提示符如下:
Administrator@LIGO-PC ~
$
首先进入ffmpeg目录,编译一般是三个步骤,首先配置,然后编译,最后安装。如果是改变编译方式,则还要在配置之前先clean
3.1 编译静态库
A. 配置
在shell提示符下输入:
./configure --enable-static --enable-memalign-hack --prefix=c:/msys/1.0 --extra-cflags="-fno-common"
这个过程要花费较长的时间,开始会有较长的时间没有反应。其中的prefix是msys的安装路径
B. 编译
make
C. 安装
make install
安装只是把要开发使用的库文件拷贝到c:/msys/1.0/lib/目录中,头文件拷贝到c:/msys/1.0/include/目录中。
产生的库文件为.a文件

(注:编译时遇到了yasm not found问题,把yasm0.8.0解压到msys/1.0/bin目录下,还是有相同问题,不过使用了./configure --enable-static --enable-memalign-hack --disable-yasm --prefix=d:/MSYS/1.0 --extra-cflags="-fno-common" 建议,能够编译通过了。 接下来就是做应用了)

3.2 编译动态库
动态库和静态库只在配置上的差别,配置如下:
./configure --enable-shared --disable-static --enable-memalign-hack --prefix=c:/msys/1.0 --extra-cflags="-fno-common"
后面的步骤一样:
make
make install
在开始编译之前,可以把原来编译的目标 文件清除掉:
make distclean

动态编译应该是会产生lib文件,但是我编译之后一直没有产生,所以后面的开发,用的都是静态库
编译之后的dll文件被放到了ffmpeg目录下,可以搜索查看它们


4. 开发
基于ffmpeg的开发,本来是想着比较简单,但实际上还是有点问题
起初在vc6.0下编译,一直编译不过,只好放到vs2008下编译,才编译通过,但是在release下还是没办法编译通过,链接时的错误如下:
1>libmingwex.a(mbrtowc.o) : error LNK2019: unresolved external symbol __imp____lc_codepage referenced in function _mbrlen
1>libmingwex.a(wcrtomb.o) : error LNK2001: unresolved external symbol __imp____lc_codepage
1>../binRelease/chipdecoder.dll : fatal error LNK1120: 1 unresolved externals

包含的头文件和库文件如下:
#ifdef __cplusplus
extern "C" {
#endif
#include "libavformat/avformat.h"

#pragma comment(lib, "libgcc.a")
#pragma comment(lib, "libavcodec.a")
#pragma comment(lib, "libavformat.a")
#pragma comment(lib, "libavutil.a")
#pragma comment(lib, "libmingwex.a")
#ifdef __cplusplus
}
#endif
其中的libgcc.a和libmingwex.a是从c:/msys下拷贝过来的,编译之前,要把c:/msys/1.0/include和c:/msys/1.0/lib两个目录加入到编译工程中

另外,由于我是先在vc6.0下编译的,无法编译通过,所以就对这些头文件进行了部分修改:
A. 把c:/msys/1.0下的三个文件_mingw.h、inttypes.h、stdint.h拷贝到了include目录中
B. 在_mingw.h文件的结尾处(在#endif /* __MINGW_H */一行之前)添加了一行:
#define __restrict__
C. 把所有long long改成了__int64,如果是直接在vs2008下编译,则这个修改应该是不需要的
D. 在stdafx.h文件的
#include <windows.h>
之后,添加:
#include <math.h>
注意,这一行必需在包含avformat.h之前,否则总是在math.h中编译通不过
分享到:
评论

相关推荐

    msys+minGW编译ffmpeg所需的环境

    在Windows环境下,为了能够编译FFmpeg源代码,我们需要一个类似Linux的开发环境,这就是msys+mingW组合的作用。它们为Windows提供了一个轻量级的类Unix命令行环境,使得可以使用GCC等GNU工具链来编译源代码。 msys...

    windows下使用MinGW+msys编译ffmpeg.docx

    windows下使用MinGW+msys编译ffmpeg文档资料,在WINDOWS编译成功.

    windows下使用MinGW+msys编译ffmpeg.pdf

    在Windows环境下编译FFmpeg通常需要借助MinGW和MSYS,这两个工具允许你在Windows系统中使用类似于Unix的命令行环境进行编译。 **一、环境准备** 1. **MinGW**: MinGW (Minimalist GNU for Windows) 提供了一个GCC...

    windows下用MinGW编译ffmpeg+x265库

    在Windows系统中,使用MinGW编译FFmpeg和x265库是一个涉及多个步骤的过程。本文档详细讲解了如何在Windows XP和Windows 8.1系统上使用MinGW进行编译。MinGW是一个移植版的GCC(GNU Compiler Collection),是一个在...

    eclipse+mingw+msys 调试 ffmpeg

    在Windows环境下,使用Eclipse集成开发环境进行FFmpeg的编译和调试是开发者常用的一种方法,它可以提供图形化界面和丰富的调试工具,使问题的查找和解决更为方便。本知识点将详细阐述如何通过Eclipse结合MinGW和MSYS...

    MinGW && MSYS编译ffmpeg

    因此,为了能在Windows上编译FFmpeg,我们需要借助MinGW(Minimalist GNU for Windows)和MSYS(Minimal SYStem)。 #### 二、MinGW与MSYS简介 1. **MinGW**:它提供了一套完整的GNU工具链,包括GCC编译器等,可以...

    MinGW+msys编译环境

    在Windows上编译FFmpeg,你需要一个合适的编译环境,MinGW+msys恰好能够满足这个需求。编译FFmpeg通常涉及以下步骤: 1. 安装MinGW和msys:首先,你需要下载并安装MinGW和msys的最新版本。确保选择包含所有必要的...

    使用msys64+vs2019在编译ffmpeg

    在Windows 10环境下,我们通常会利用MSYS2(一个为Windows提供类Unix开发环境的工具)和Visual Studio 2019(微软的C++集成开发环境)来编译FFmpeg。下面将详细阐述如何在Windows 10上通过msys64和VS2019编译FFmpeg...

    windows下编译ffmpeg 并

    在Windows环境下编译FFmpeg是一项技术性较强的任务,特别是对于初学者来说可能充满挑战。FFmpeg是一个开源项目,提供了一套强大的音频、视频处理工具,包括编码、解码、转换和流媒体等功能。以下是编译FFmpeg的详细...

    msys2编译ffmpeg完整环境.zip

    标题“msys2编译ffmpeg完整环境.zip”表明这个压缩包包含了一套完整的环境,用于在Windows操作系统中使用MSYS2编译FFmpeg项目。这通常包括FFmpeg源码、MSYS2的MinGW-w64环境、必要的编译工具链(如GCC)以及所有依赖...

    eclpse+cdt+mingw+msys安装文档

    在Windows上编译FFmpeg,我们需要确保所有必要的编译工具和库都已安装,并正确配置了环境。 在Eclipse+CDT中,可以通过新建一个C/C++工程,然后将FFmpeg源代码导入工程,设置好编译选项,利用CDT提供的构建系统进行...

    MinGW 环境下 使用 Qt 编译 FFMPEG

    在 Windows 平台上,使用 MinGW 环境编译 FFMPEG 是一个复杂的过程,需要借助 MSYS2 和 Qt 工具链。以下是详细的编译过程: ### 1. 安装 MSYS2 MSYS2 是一个 Unix-like 的命令行环境,可以在 Windows 平台上模拟 ...

    FFmpeg在Windows系统下的编译

    在Windows系统下编译FFmpeg,需要遵循一定的步骤,确保所有依赖项正确安装和配置。以下是一个详细的编译过程: 首先,你需要安装MSys和MinGW环境。MSys是一个轻量级的类Unix环境,用于在Windows上运行一些基于Unix...

    win7下编译ffmpeg所需安装包(2016.12最新版)

    在Windows 7环境下编译FFmpeg,通常是为了实现特定的定制需求或者获取最新版本的功能。 首先,我们需要一个合适的编译环境。在Win7系统中,推荐使用MinGW-w64,这是一个为Windows平台提供的GCC(GNU Compiler ...

    ffmpeg编译工具-msys2-x86_64.rar

    在Windows操作系统上编译FFmpeg时,通常会遇到很多依赖库和环境配置的问题,而`msys2`则是一个轻量级的开源开发环境,专为在Windows上构建POSIX兼容软件而设计,它提供了类似于Linux的命令行接口,以及一套完整的...

    编译ffmpeg+H265_win32_x64详细步骤

    ### 编译ffmpeg+H265_win32_x64详细步骤 #### 一、配置MSYS2.0环境 在开始之前,确保已经安装了MSYS2.0环境。可以通过百度等搜索引擎查找安装教程来完成安装。安装完成后,需要进行以下几步设置: 1. **添加环境...

    FFmpeg库+windows7 64位+vs2010裁剪以及MinGW+msys环境搭建

    FFmpeg库+windows7 64位+vs2010裁剪以及MinGW32+msys环境搭建总结的文档。资源包括两种1)内含c99-to-c89-1.0的三个文件,32位的yasm-1.3.0.exe,inttypes.h等ffmpeg库编译需要的库。2)还有编译裁剪好的很小的ffmpeg...

Global site tag (gtag.js) - Google Analytics