Создание ffmpeg с помощью vcpkg в Windows 10: как сохранить символы в исполняемых файлах?

#debugging #ffmpeg #msys #vcpkg

Вопрос:

Я создаю исходный код ffmpeg в Windows 10 в попытке настроить и включить этот пакет с открытым исходным кодом как часть более крупного пакета. Поскольку ffmpeg-это кодовая база, ориентированная на Linux, я использую платформу MSYS2 для создания исполняемых файлов Windows. Для этих исполняемых файлов мне нужна возможность пошагового выполнения кода, поэтому мне нужна версия ffmpeg, включающая символы. По соглашению, проект ffmpeg создает две версии каждого исполняемого файла, ffmpeg и ffmpeg_g. Последний (ffmpeg_g) сохраняет символы, в то время как первый удаляется. Я выбрал набор инструментов vcpkg как наиболее простой способ загрузки необходимых пакетов и создания необходимых исполняемых файлов в формате Windows. К сожалению, процесс сборки vcpkg создает два идентичных исполняемых файла для ffmpeg и ffmpeg_g, ни один из которых не содержит символов.

Это мой процесс: Установите msys2-x86_64-20210725.exe

Клонируйте репозиторий git для vcpkg в моей системе:

 git clone https://github.com/microsoft/vcpkg
cd vcpkg
 

Теперь я использовал vcpkg для установки и сборки исходного кода (версия X) в vcpkginstall в соответствии с инструкциями по адресу:
https://trac.ffmpeg.org/wiki/CompilationGuide/vcpkg

Затем я вызываю vcpkg со следующими параметрами.

 ./vcpkg install ffmpeg[core,avcodec,avdevice,avfilter,avformat,ffmpeg,ffplay,ffprobe,nvcodec,opencl,postproc,sdl2,swscale,nonfree]:x64-windows --recurse
 

Он успешно строит ffmpeg.exe и связанные исполняемые файлы, а также необходимые библиотеки DLL. Эта выдержка из журнала сборки показывает следующее:

    Creating library libavdevice/avdevice.lib and object libavdevice/avdevice.exp
LD  ffmpeg_g.exe
LD  ffplay_g.exe
LD  ffprobe_g.exe
CP  ffmpeg.exe
CP  ffplay.exe
CP  ffprobe.exe
STRIP   ffmpeg.exe
skipping strip ffmpeg.exe
STRIP   ffprobe.exe
skipping strip ffprobe.exe
STRIP   ffplay.exe
skipping strip ffplay.exe
 

Это означает не только то, что скрипт не удаляет файлы «_g», но и то, что удаление символов каким-то образом отключено.
Тем не менее, когда я захожу в папку vcpkgbuildtreesffmpegx64-windows-dbg и ввожу «ls ffmpeg*.exe», это говорит мне, что исполняемые файлы ffmpeg и ffmpeg_g имеют одинаковый размер.
Конечно же, когда я ввожу команду «gdb ffmpeg_g.exe» это дает мне предупреждение:

 Reading symbols from ffmpeg_g.exe...
(No debugging symbols found in ffmpeg_g.exe)
 

У меня сложилось впечатление, что символы должны создаваться и сохраняться по умолчанию, но, по-видимому, это не так.
Есть ли какой-нибудь вариант компилятора или компоновщика, который я могу передать в vcpkg, чтобы создать исполняемый файл, содержащий символы? Или я делаю что-то еще не так?

Комментарии:

1. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.

2. Я расширил свое объяснение и уточнил свой вопрос. Я надеюсь, что теперь это имеет больше смысла.