我在 libvpx 中发现了一个错误,它阻碍了我在视频中使用 alpha。我已经修复了这个错误,但这意味着我必须重建 libvpx(之前的构建在时间的迷雾中丢失了,除了头文件和库)。我已获取版本 1.6.1 并按照此处的说明https://github.com/webmproject/libvpx,在 Windows 10 上的 Bash 中使用此命令行生成 Visual Studio 2015 解决方案:
configure --target=x86_64-win64-vs14 --as=auto --enable-vp9-highbitdepth --enable-vp8 --enable-vp9 --enable-error-concealment --enable-runtime-cpu-detect --enable-libyuv
一切看起来都很好:我在 Visual Studio 2015 中打开了解决方案并尝试构建 vpx 项目,该项目产生了许多目标文件和组装的程序集源,但最终我收到以下错误:
LINK : fatal error LNK1181: cannot open input file 'x64\Debug\vpx\vpx_ports_emms_asm.obj'
没有同名的源文件,所以没有对应的obj文件。查看项目,有许多 .mk 文件,其中一个名为 vpx_ports 并包含以下文本:
PORTS_SRCS-yes += vpx_ports.mk
PORTS_SRCS-yes += bitops.h
PORTS_SRCS-yes += mem.h
PORTS_SRCS-yes += msvc.h
PORTS_SRCS-yes += system_state.h
PORTS_SRCS-yes += vpx_timer.h
ifeq ($(ARCH_X86)$(ARCH_X86_64),yes)
PORTS_SRCS-yes += emms.asm
PORTS_SRCS-yes += x86.h
PORTS_SRCS-yes += x86_abi_support.asm
endif
PORTS_SRCS-$(ARCH_ARM) += arm_cpudetect.c
PORTS_SRCS-$(ARCH_ARM) += arm.h
在我看来,这就像某种我不熟悉的 makefile 魔法。项目中没有其他 vpx_ports_* 文件。项目中还有其他几个 .mk 文件。
推荐使用 Cygwin,我尝试在 Windows 上使用它而不是 Bash,但获得了相同的结果。最终,我想修复这个错误并继续我的生活。欢迎任何帮助,无论是向我解释如何解决链接器错误或建议替代构建机制。
[编辑 1]
进度:构建脚本为 asm 文件创建自定义构建命令,例如
yasm -Xvc -g cv8 -f win64 -I"." -I".." "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj
但是,在最新版本的 yasm 中,-o 指定了输出目录,而不是输出文件名(尽管文档可能会这样说);该文件确实已成功组装到 emms.obj。可悲的是,似乎没有指定输出文件名的选项。