为Windows 64位应用程序构建静态FFmpeg库

时间:2016-03-24 13:13:35

标签: ffmpeg mingw mingw-w64

我为Windows 64位构建静态FFmpeg库。配置如下:

./configure --disable-everything --enable-static --disable-shared --enable-memalign-hack --disable-debug --enable-stripping --enable-protocol=file --enable-yasm --enable-decoder=mp3,mpeg4,h264 --enable-muxer=mp4,avi --enable-encoder=mjpeg

该应用程序使用/MT选项在Visual Studio 2012中构建,并与libavformat.alibavcodec.a等链接。我还将其与libmingwex.alibgcc.a相关联

链接器失败并出现以下错误:

6>libavformat.a(file.o) : error LNK2001: unresolved external symbol __imp__wrmdir
6>libavformat.a(file.o) : error LNK2001: unresolved external symbol __imp__rmdir
6>libavformat.a(file.o) : error LNK2001: unresolved external symbol __imp__wunlink
6>libavformat.a(file.o) : error LNK2001: unresolved external symbol __imp__unlink
6>libavutil.a(time.o) : error LNK2001: unresolved external symbol clock_gettime
6>libavutil.a(time.o) : error LNK2001: unresolved external symbol nanosleep

对于后两个错误,我可以通过在config.h#define HAVE_NANOSLEEP 1#define HAVE_CLOCK_GETTIME 1中手动定义宏来解决这些错误。

问题是如何解决前者4.这些看起来像是从dll(__imp前缀)导入的函数,但我的应用程序是用/MT构建的,我不想要FFmpeg中的任何动态依赖项。如何摆脱它们?

我尝试使用--extra-cflags="-static"配置FFmpeg,但它没有帮助。

1 个答案:

答案 0 :(得分:0)

事实证明,现在可以原生build FFmpeg with Visual Studio tool chain。所以与MinGW相关的所有问题都不再相关了。

对于2013版之前的VS版本,它没有得到C99的支持,需要下载c99wrap.exe,c99conv.exe和inttypes.h。然后打开Visual Studio本机x64命令提示符(以便VC工具链和标题位于搜索路径上),并调用./configure --toolchain=msvcmake