ffmpeg在windows下的编译

来源:互联网 发布:dz论坛seo入门教程 编辑:程序博客网 时间:2024/06/06 02:57
ffmpeg在windows下的编译
创建时间:2013-4-17 18:10|修改时间:2013-5-13 11:55|作者:|来源:http://blog.csdn.net/jszj/article/details/4028716
 
1 下载mingw并完全安装,新版本的安装器会安装几乎所有常用的库
2 下载pkg-config,glib并拷贝到mingw/bin下面,具体原因及步骤见“pkg-config for windows"这篇文章
3.1编译静态库:
A. 配置

在shell提示符下输入:

./configure --enable-static --enable-memalign-hack --prefix=/d/project/OpenSource/ffmpeg_mingwBuild --extra-cflags="-fno-common"  --cpu=i686

//如果未指定--cpu则会报一下错误:

这个过程要花费较长的时间,开始会有较长的时间没有反应。其中的prefix是编译完成后软件的安装路径

B. 编译

make

C. 安装

make install


编译后生成的是.a结尾的库,而不是.lib结尾的,还需要查找原因


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中编译通不过

原创粉丝点击