1

需要一些关于在 Windows 上启用 libvpx 编译 ffmpeg 的信息。这是我遵循的步骤和我得到的错误

  1. 在 Windows 上安装 msys2 并安装所需的软件包(git、pkg-config、gcc 编译器等)
  2. 从“ https://github.com/webmproject/libvpx.git ”克隆 libvpx并创建了一个 vs15 解决方案(命令:./configure --disable-vp8 --disable-vp9-encoder --target=x86_64-win64-vs15 )
  3. 打开 vpx.sln 并成功编译 vpxmd.lib(创建了一个 vpx.pc 文件并将包含和库保存在适当的位置)
  4. 从https://github.com/FFmpeg/FFmpeg.git和 msys2克隆 ffmpeg我尝试构建它(命令:./configure --enable-asm --enable-yasm --arch=x86_64 --target-os= win64 --disable-encoders --disable-muxers --enable-libvpx --disable-doc --disable-ffplay --disable-ffprobe --disable-ffmpeg --enable-shared --disable-static --disable- bzlib --disable-libopenjpeg --disable-iconv --disable-zlib --prefix=/d/Stadia/FFmpeg --toolchain=msvc --disable-debug)

ffmpeg 构建了一个很好的库,但它不包括 libvpx。config.log 如下:

./ffconf.NEscC1Fm/test.c(4): 警告 C4311: 'type cast': 从'vpx_codec_iface_t *(__cdecl *)(void)' 到'long' 的指针截断

./compat/windows/mslink /usr/local/lib -nologo -I/usr/local/include -libpath:/usr/local/lib -out:./ffconf.NEscC1Fm/test.exe ./ffconf.NEscC1Fm/ test.o vpx.lib

链接:警告 LNK4044:无法识别的选项“/IC:/msys64/usr/local/include”;忽略 lib.obj(vp8_vp8_dx_iface.obj) :找到 MSIL .netmodule 或使用 /GL 编译的模块;重新启动与 /LTCG 的链接;将 /LTCG 添加到链接命令行以提高链接器性能

链接:警告 LNK4044:无法识别的选项“/IC:/msys64/usr/local/include”;忽略

链接:警告 LNK4098:defaultlib 'MSVCRT' 与使用其他库冲突;使用 /NODEFAULTLIB:library lib.obj(vpx_mem_vpx_mem.obj):错误 LNK2001:未解析的外部符号 __imp_malloc lib.obj(vp8_decoder_threading.obj):错误 LNK2001:未解析的外部符号 __imp__beginthreadex lib.obj(vp8_decoder_decodeframe.obj):错误 LNK2001:未解析外部符号 __imp_fopen ./ffconf.NEscC1Fm/test.exe : 致命错误 LNK1120: 3 unresolved externals

我的 msys2 安装在 C:/msys2/ 和 /home/ 对应于 C/msys2/home 如果我使用 --extra-ldflags="-L/home/usr/local/lib" ,链接器将其视为 /LC: /msys2/usr/local/lib 并因此失败。

一步一步的指南将非常感谢这里

4

1 回答 1

1

第一个问题是您编译的库有名称vpxmd.lib,但 ffmpeg 试图使用vpx.lib.
另一个问题是来自 msvcrt 的未解析的外部符号。
尝试将configureffmpeg 文件中的一些行从:
VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs"
更改为:
VPX_IMG_FMT_HIGHBITDEPTH" "-lvpxmd -lmsvcrtd $libm_extralibs $pthreads_extralibs"
并将您的放置vpxmd.lib到 ffmpeg 根目录。

于 2021-06-12T12:32:01.713 回答