首页 > 解决方案 > 在 Windows 10 上使用 vcpkg 构建 ffmpeg:如何在可执行文件中保留符号?

问题描述

我正在 Windows 10 上构建 ffmpeg 源代码,以尝试自定义并将这个开源包合并为更大包的一部分。因为 ffmpeg 是一个以 Linux 为中心的代码库,所以我使用 MSYS2 平台来构建我的 Windows 可执行文件。对于这些可执行文件,我需要能够单步执行代码,因此我需要一个包含符号的 ffmpeg 版本。按照惯例,ffmpeg 项目为每个可执行文件构建两个版本,ffmpeg 和 ffmpeg_g。后者(ffmpeg_g)保留符号,而前者被剥离。我选择 vcpkg 工具集作为下载必要软件包和构建 Windows 格式所需可执行文件的最直接方式。不幸的是,vcpkg 构建过程为 ffmpeg 和 ffmpeg_g 创建了两个相同的可执行文件,它们都不包含符号。

这是我的过程:安装 msys2-x86_64-20210725.exe

在我的系统上克隆 vcpkg 的 git 存储库:

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

现在我使用 vcpkg 根据以下说明在 vcpkg\install 安装和构建源代码(版本 X): 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”文件,而且符号剥离以某种方式被禁用。然而,当我进入文件夹 vcpkg\buildtrees\ffmpeg\x64-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,以便创建包含符号的可执行文件?还是我做错了什么?

标签: debuggingffmpegmsysvcpkg

解决方案


推荐阅读