Я нашел ошибку в libvpx, которая мешает мне использовать альфа в видео. Я исправил ошибку, но это означает, что я должен пересобрать libvpx (предыдущая сборка теряется в глубине веков, за исключением заголовков и библиотек). Я загрузил версию 1.6.1 и следовал инструкциям здесь https://github.com/webmproject/libvpx, создание решения Visual Studio 2015 с помощью этой командной строки в Bash в Windows 10:
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, и я попытался использовать это вместо Bash на Windows, но достиг того же результата. В конечном счете, я хочу исправить ошибку и продолжить свою жизнь. Любая помощь приветствуется, объясняет ли она мне, как устранить ошибку компоновщика, или предлагает альтернативный механизм сборки.
[Редактировать 1] Ход выполнения: скрипт сборки создает пользовательские команды сборки для файлов asm, такие какyasm -Xvc -g cv8 -f win64 -I"." -I".." "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj
Однако -o указывает выходной каталог, а не имя выходного файла (несмотря на то, что может быть сказано в документации) в последней версии yasm; файл действительно был успешно собран в emms.obj. К сожалению, кажется, что нет возможности указать имя выходного файла.
Оказывается, я установил неправильный YASM. На сайте webmproject предварительные условия сборки предупреждают об использовании интегрированной версии VS.
Других решений пока нет …