MinGW编译ffmpeg的静态库

mingw  编译ffmpeg的静态库

环境:

Gcc  4.7.2

libz  1.2.7

MSVC 10.0 ( VS2010 )

 

由于原来的工程 依赖 .lib 所以ffmepg出来的静态库 .a  后缀的都改为了 .lib.

 其他库则保持 .a 后缀。

 在MSVC 连接中 中增加以下 库。

gcc 4.7.2 有两个目录  i686-w64-mingw32 x86_64-w64-mingw32  选用i686-w64-mingw32

 

 

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等额外编解码库

ffmpeg.arrozcru.com上面提到,静态库的链接顺序一定不能错,否则运行时会出现一些莫名其妙的问题。建议的链接顺序是
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

 

发现没有 libcoldname.a , 可能是原来的文档有问题。 改为libmoldname.a

 

出现如下错误:

 

1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _longjmp 已经在 libmingwex.a(lib32_libmingwex_a-mingw_getsp.o) 中定义
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: __gmtime32 已经在 libmingwex.a(lib32_libmingwex_a-_gmtime32.o) 中定义
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: __time32 已经在 libmingwex.a(lib32_libmingwex_a-_time32.o) 中定义
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: __localtime32 已经在 libmingwex.a(lib32_libmingwex_a-_localtime32.o) 中定义
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: __mktime32 已经在 libmingwex.a(lib32_libmingwex_a-_mktime32.o) 中定义
1>     正在创建库 D:\Projects\Lav\lavfilters\bin_Win32d\LAVSplitter.lib 和对象 D:\Projects\Lav\lavfilters\bin_Win32d\LAVSplitter.exp
1>LAVSplitter.exp : warning LNK4078: 找到多个“.drectve”节,它们具有不同的特性(00000200)
1>avformat-lav.lib(utils.o) : error LNK2019: 无法解析的外部符号 __imp__getaddrinfo@16,该符号在函数 _ff_url_join 中被引用
1>avformat-lav.lib(rtsp.o) : error LNK2001: 无法解析的外部符号 __imp__getaddrinfo@16
1>avformat-lav.lib(tcp.o) : error LNK2001: 无法解析的外部符号 __imp__getaddrinfo@16
1>avformat-lav.lib(udp.o) : error LNK2001: 无法解析的外部符号 __imp__getaddrinfo@16
1>avformat-lav.lib(utils.o) : error LNK2019: 无法解析的外部符号 __imp__freeaddrinfo@4,该符号在函数 _ff_url_join 中被引用
1>avformat-lav.lib(rtsp.o) : error LNK2001: 无法解析的外部符号 __imp__freeaddrinfo@4
1>avformat-lav.lib(tcp.o) : error LNK2001: 无法解析的外部符号 __imp__freeaddrinfo@4
1>avformat-lav.lib(udp.o) : error LNK2001: 无法解析的外部符号 __imp__freeaddrinfo@4
1>avformat-lav.lib(matroskadec.o) : error LNK2019: 无法解析的外部符号 _BZ2_bzDecompressInit@12,该符号在函数 _matroska_decode_buffer.isra.3 中被引用
1>avformat-lav.lib(matroskadec.o) : error LNK2019: 无法解析的外部符号 _BZ2_bzDecompress@4,该符号在函数 _matroska_decode_buffer.isra.3 中被引用
1>avformat-lav.lib(matroskadec.o) : error LNK2019: 无法解析的外部符号 _BZ2_bzDecompressEnd@4,该符号在函数 _matroska_decode_buffer.isra.3 中被引用
1>avformat-lav.lib(rtsp.o) : error LNK2019: 无法解析的外部符号 __imp__getnameinfo@28,该符号在函数 _sdp_read_header 中被引用
1>avformat-lav.lib(udp.o) : error LNK2001: 无法解析的外部符号 __imp__getnameinfo@28
1>libmingwex.a(lib32_libmingwex_a-wassert.o) : error LNK2019: 无法解析的外部符号 _mingw_app_type,该符号在函数 __wassert 中被引用
1>libmingwex.a(lib32_libmingwex_a-sin.o) : error LNK2019: 无法解析的外部符号 ___mingw_raise_matherr,该符号在函数 _sin 中被引用
1>libmingwex.a(lib32_libmingwex_a-cos.o) : error LNK2001: 无法解析的外部符号 ___mingw_raise_matherr
1>libmingwex.a(lib32_libmingwex_a-sqrtf.o) : error LNK2001: 无法解析的外部符号 ___mingw_raise_matherr
1>libmingwex.a(lib32_libmingwex_a-powi.o) : error LNK2001: 无法解析的外部符号 ___mingw_raise_matherr
1>libmingwex.a(lib32_libmingwex_a-log.o) : error LNK2001: 无法解析的外部符号 ___mingw_raise_matherr
1>libmingwex.a(lib32_libmingwex_a-sqrt.o) : error LNK2001: 无法解析的外部符号 ___mingw_raise_matherr
1>libmingwex.a(lib32_libmingwex_a-exp.o) : error LNK2001: 无法解析的外部符号 ___mingw_raise_matherr
1>libmingwex.a(lib32_libmingwex_a-pow.o) : error LNK2001: 无法解析的外部符号 ___mingw_raise_matherr
1>D:\Projects\Lav\lavfilters\bin_Win32d\LAVSplitter.ax : fatal error LNK1120: 8 个无法解析的外部命令
1>
1>生成失败。

 

 

 

重新用上官方下载的 4.6.2 版本。编译成功。

但是 都是无法用vc调试的。这么看来编译静态库是没有 特别的益处。

 

 

你可能感兴趣的:(ffmpeg)