c++ - 使用 Bash 在 Windows 10 上使用 Visual Studio 2015 构建 libvpx

标签 c++ visual-studio-2015 libvpx makefile

我在 libvpx 中发现了一个错误,它阻碍了我在视频中使用 alpha。我已经修复了这个错误,但这意味着我必须重建 libvpx(除了 header 和库之外,之前的构建在时间的迷雾中丢失了)。我已获取版本 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。遗憾的是,似乎没有指定输出文件名的选项。

最佳答案

原来是我安装错了YASM。在 webmproject 站点上,构建先决条件警告不要使用 VS 集成版本。

关于c++ - 使用 Bash 在 Windows 10 上使用 Visual Studio 2015 构建 libvpx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44021235/

相关文章:

javascript - Javascript 中的 VP8 视频渲染

encoding - VP9 编码限制为 4 个线程?

c++ - 没有模板也能完美转发吗

video - 使用 libav/ffmpeg 在 UDP 流中找到更好的 VP8 参数以实现稳健性

C++函数调用二维数组

c# - 如何使用 ASP.Net vNext/5 登录到输出窗口

c++ - VS2015 的 Boost nuget 包

sqlite - 如何使用 ClickOnce 发布带有 SQLite 的 Winforms 应用程序

c++ - 将文件的列读入数组

c++ - 如何分析固件镜像的大小?