图文介绍windows下实现编译ffmpeg工程的详细步骤

本文来自:http://www.cuplayer.com/player/PlayerCode/FFmpeg/2014/0706/1401.html

图文介绍windows下实现编译ffmpeg工程的详细步骤:

1、搭建 MinGW 的编译环境

下载yasm,地址:http://yasm.tortall.net/Download.html

改名为yasm.exe放到C:\WINDOWS\system32 或者 C:\MinGW\msys\1.0\bin文件夹下。

下载 mingw-get-inst-20101030.exe , 点击这里下载 http://sourceforge.net/projects/mingw/files/ 。

安装时选择如下

安装过程中,需要联网。安装程序会去网上下载对应的程序。这一过程耗时较长,请耐心等候。

注意:如果安装过程中,网络断开或是无法出现了下载某些组建失败,不用担心,等安装程序运行完成后,再次运行安装程序,选择如上,安装程序会继续下载没有成功的软件。

打开C:\MinGW\msys\1.0\msys.bat文件,在文件头部加上

call "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"

这句话的作用就是: 设置 2008 x86 的开发环境。我们主要是使用它的 lib.exe 生成 *.lib 文件。

运行msys.bat, 程序会根据你当前的用户名,在目录(C:\MinGW\msys\1.0\home)下建一个工作目录。

目录的名称和你的用户名一样。如果当前你的系统用户名是 administer, 那么你的工作目录就是(C:\MinGW\msys\1.0\home\administer)

2、编译 FFmpeg

解压缩 ffmpeg代码 到 MinGW 的工作目录。例如(C:\MinGW\msys\1.0\home\administer)

运行  C:\MinGW\msys\1.0\msys.bat,即可进入 MinGW 的工作目录了。

他和cmd命令有区别,右斜杠需要换成左斜杠,盘符D:也要改成/d

输入命令 "ls" , 这等价于 "dir"。列出当前目录下的文件。

输入 cd ffmpeg,进入ffmpeg 目录。

在命令行下输入如下命令:

./configure --enable-memalign-hack --enable-shared make make install

成功后,编译生成的文件保存在 (C:\MinGW\msys\1.0\local\bin),头文件保存在 (C:\MinGW\msys\1.0\local\include)。

./configure --disable-debug --enable-static --enable-memalign-hack --enable-swscale --disable-avformat --disable-avfilter --enable-pthreads  --enable-runtime-cpudetect --disable-w32threads --disable-ffprobe --enable-version3 --disable-everything --enable-decoder=h264 --enable-decoder=mpeg4 --disable-ffmpeg --enable-parser=h264 --enable-parser=mpeg4video --enable-parser=mpegvideo

3、在VC中使用FFmpeg静态库
Additional Dependencies

libavcodec.a libavformat.a libavutil.a libswscale.a libz.a libdts.a libfaac.a libfaad.a

libgsm.a libmp3lame.a libnut.a libogg.a libtheora.a libvorbis.a libvorbisenc.a libx264.a

libxvidcore.a libpthreadGC2.a libgcc.a libmingwex.a wsock32.lib vfw32.lib

要使用ffmpeg的静态库,必须把ffmpeg用到的其他静态库也链接到VC的工程中。这些库主要包括

libgcc.a:gcc的函数库,一般在C:\MinGW\lib\gcc\mingw32\4.x.x\

libmingwex.a:_snprint函数所在,一般在C:\MinGW\lib\

libcoldname.a:_strcasecmp的实现,也在C:\MinGW\lib\

wsock32.lib:Windows socket库

libz.a:zip压缩库

libfaad、libx264等额外编解码库

静态库的链接顺序一定不能错,否则运行时会出现一些莫名其妙的问题。建议的链接顺序是

libgcc.a libmingwex.a libcoldname.a libavcodec.a libavformat.a

libavutil.a libswscale.a libz.a libdts.a libfaac.a libfaad.a libgsm.a

libmp3lame.a libnut.a libogg.a libtheora.a libvorbis.a libvorbisenc.a

libx264.a libxvidcore.a libpthreadGC2.a  wsock32.lib vfw32.lib

编译ffmpeg

有两个编译方式,一个是静态库,一个是动态库。

首先启动msys,

c:/msys/1.0/msys.bat

在shell上的提示符如下:

[email protected] ~$首先进入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文件

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_codepage1>
../binRelease/chipdecoder.dll : fatal error LNK1120: 1 unresolved externals

包含的头文件和库文件如下:

#ifdef __cplusplusextern "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中编译通不过

时间: 2024-12-15 07:24:10

图文介绍windows下实现编译ffmpeg工程的详细步骤的相关文章

windows下cygwin编译ffmpeg库

ffmpeg在Linux下的编译相当简单,只需要configure ,再make 一下就可以了. 需要动态库的话在configure 后面加一个 --enable-shared  就ok了. 但在windows下就不是很容易了,在网上搜索了一下各种在windows下编译的方法,大多千篇一律,而且步骤繁琐,有的需要依赖很多库.而我只想像Linux下那样单纯方便的编译出ffmpeg里的几个库,是否有简单的方法呢?答案是肯定的. 下载cygwin,下载地址:https://cygwin.com/ 我下

Windows下VC编译OpenDDS

OpenDDS是一个OMG组织DDS标准的C++开源实现,OpenDDS同时也提供Java支持.OpenDDS依赖ACE抽象层来提供不同平台的兼容性,同时也依赖于TAO(例如TAO的IDL编译器).当前OpenDDS有ociweb ObjectComputing维护,官方网站http://www.opendds.org/.目前OpenDDS支持的平台有Windows,Linux family,Android,VxWorks等,可用的编译器包括VC,gcc,QNX gcc等. 1. OpenDDS

Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)

时间:2018年10月22日,学习任何物事都有个探索过程.欢迎留言探讨. 在Qt程序中,添加python进行混合编程,可以使用Python API,但交互起来很麻烦,不友好.网上推荐使用PythonQt框架. 强调下: PythonQt,方便Qt C++程序员,将python引入项目 PyQt PySide,给python程序员,将Qt界面引入项目 本机环境: 1.win7 64 旗舰版 2.Qt 5.11.2(MSVC 2015,32 bit) 3.Python 3.7.0 (32-bit)

Windows下wxWidgets编译错误的解决方法

Windows下wxWidgets编译错误的解决方法 转自 https://www.jianshu.com/p/b89d205f2cec 错误提示:d:\develop\audacity\wxwidgets-3.1.1\include\wx\platform.h(148): fatal error C1083: 无法打开包括文件: “wx/setup.h”: No such file or directory 解决方法:1.到D:\develop\audacity\wxWidgets-3.1.1

Mac下 Windows 7 虚拟机成功搭建SVN服务器后如何与Xcode建立联系,并上传原始工程的详细步骤

---恢复内容开始--- 本篇文章主要讲述Mac下 Windows 7 虚拟机成功搭建SVN服务器后如何与Xcode建立联系,并上传原始工程的详细步骤. 关于如何配置Mac下虚拟机可以参考: http://www.cnblogs.com/syc2016/articles/5151056.html 关于如何在Mac下Windows 7 虚拟机下配置SVN服务器可参考: http://www.cnblogs.com/syc2016/p/5151420.html 一.操作步骤 1.打开虚拟机上的Vis

windows下rabbitmq-c编译(带openssl、无需MinGW)

因为项目原因,需要使用到rabbitmq的c客户端库.首先,参见上一篇windows下openssl编译,如果已经使用cmake编译过了,则先delete cache(File-Delete Cache),否则原来的cmake缓存都在了,将仍然会出现原来的错误. 依次点击configire.generate,可以生成vs sln.如下: 最后使用VS即可生成rabbitmq.4.dll,如下: 测试自带的例子: D:\RabbitMQ Server\rabbitmq_server-3.6.5\s

linux下cmake编译C++工程之总结篇

昨天正式把项目编译完成,经历了一周的摸索和折磨后,最后也想:oh,it's so easy! 但是过程确实困难的,因为cmake官方只有API的解释,而且解释的不是很清楚. 一般项目都是狠复杂的层级关系 这种如何来写cmake呢? 首先要知道一个很重要的东西,cmake是一定要从顶级目录开始,才能继承目录,比如直接在project1目录里用../lib是无效的,因为cmake并不知道: 而如果在project下建立cmakelists.txt 然后add_subdir(project1),pro

ACE在windows下的编译及配置(VS2010)

ACE在windows下的编译及配置(VS2010) 分类:             -[小西南]-              2013-08-06 16:17     2354人阅读     评论(6)     收藏     举报 目录(?)[+] 1 下载ACE 2 创建ACE的配置文件 3 编译ACE库 4 可为ACE目录设置环境变量 5 VS2010 ACE配置 6 测试操作是否成功 系统:win7 开发环境:Visual Studio 10 ACE版本:ACE-6.2.0 参考了很多师

Mac平台下的Qt程序在Windows下执行编译运行出现的中文乱码问题

Mac平台下的Qt程序在Windows下执行编译运行时,QString::asprintf()部分会出现的中文乱码问题,之前已经使用QStringLiteral宏解决了一个中文乱码问题: 但是此种情形单凭QStringLiteral宏解决不了. 原因: mac下采用MinGW编译,在Windows下可能是MinGW,也可能是MSV2017等VS编译器编译.如果win平台下是MinGW编译,在mac下写好的程序在win平台下运行不会出现乱码: 如果win下是MSV2017编译就会出现中文乱码,需要