我为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.a
,libavcodec.a
等链接。我还将其与libmingwex.a
,libgcc.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,但它没有帮助。
答案 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=msvc
和make
。