为 Windows 64 位应用程序构建静态 FFmpeg 库
Building static FFmpeg libs for Windows 64-bit application
我为 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
.
该应用程序是在 Visual Studio 2012 年构建的,带有 /MT
选项和 link 编辑 libavformat.a
、libavcodec.a
等。我也 link 它与 libmingwex.a
, libgcc.a
.
linker 失败并出现以下错误:
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,但没有用。
事实证明,现在 build FFmpeg with Visual Studio tool chain 可以原生使用了。所以所有 MinGW-related 问题都不再相关了。
对于 2013 之前的 VS 版本,没有像样的 C99 支持,需要下载 c99wrap.exe、c99conv.exe 和 inttypes.h。然后打开 Visual Studio 本机 x64 命令提示符(以便 VC 工具链和 headers 在搜索路径上),并调用 ./configure --toolchain=msvc
和 make
。
我为 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
.
该应用程序是在 Visual Studio 2012 年构建的,带有 /MT
选项和 link 编辑 libavformat.a
、libavcodec.a
等。我也 link 它与 libmingwex.a
, libgcc.a
.
linker 失败并出现以下错误:
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,但没有用。
事实证明,现在 build FFmpeg with Visual Studio tool chain 可以原生使用了。所以所有 MinGW-related 问题都不再相关了。
对于 2013 之前的 VS 版本,没有像样的 C99 支持,需要下载 c99wrap.exe、c99conv.exe 和 inttypes.h。然后打开 Visual Studio 本机 x64 命令提示符(以便 VC 工具链和 headers 在搜索路径上),并调用 ./configure --toolchain=msvc
和 make
。