尝试为 Windows 10 (x86_64) 静态编译 FFmpeg 4.2.3,但二进制文件要求缺少 DLL

Posted

技术标签:

【中文标题】尝试为 Windows 10 (x86_64) 静态编译 FFmpeg 4.2.3,但二进制文件要求缺少 DLL【英文标题】:Attempting to compile FFmpeg 4.2.3 statically for Windows 10 (x86_64), but binaries asks for missing DLLs 【发布时间】:2020-05-26 23:41:19 【问题描述】:

我正在使用 Msys MinGW (x86_64) 并从他们的网站上提取了 FFmpeg 最新主要版本的快照。这是我的./configure 选项。我计划在我编译它的计算机和我拥有的其他 Windows 计算机上使用这些二进制文件。

./configure --enable-libaom --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libgme --enable-libmfx --enable-libkvazaar --enable-libmp3lame --enable-libilbc --enable-libvpx --enable-libmodplug --enable-version3 --enable-nonfree --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libfdk-aac --enable-libopenh264 --enable-libopenjpeg --enable-nvenc --enable-nvdec --enable-cuda --enable-cuvid --enable-libtwolame --enable-vapoursynth --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxavs2 --enable-gpl --enable-static --disable-shared

Output of configure script (pastebin)

uname -a 的输出(在 Msys 中)

MINGW64_NT-10.0-18362 <scrubbed> 3.1.4-340.x86_64 2020-05-22 08:28 UTC x86_64 Msys

我面临的问题是,尽管传递了选项--enable-static--disable-shared,但生成的可执行文件仍然需要libchromaprint.dlllibfdk-aac-2.dlllibgme.dll 才能运行。我所期望的是 FFmpeg 将独立于任何 DLL 文件执行,因为我将这些选项传递给了./configure

【问题讨论】:

即使 ffmpeg 构建是正确的,您链接的一些所谓的静态库也可能不是。你能运行最后的链接命令吗? 【参考方案1】:

即使您指定--enable-static,共享库也可能在未找到静态库的情况下使用。在构建过程中,您应该会收到来自 libtool 的警告。

因此,如果它查找 libchromaprint.a 并且找不到它,它将与 libchromaprint.dll.a 链接,从而导致对 DLL 的依赖。

检查依赖关系以查看它们的静态库是否可用(在您的情况下为libchromaprint.alibfdk-aac-2.alibgme.a)。

【讨论】:

我能够在 /mingw64/lib 下找到这些文件,但是,在那里也可以找到 *.dll.a 文件(libgme 除外,它没有关联的 libgme.a)。我应该怎么做才能明确告诉./configure去哪里看? 您可以尝试将LDFLAGS="-L/mingw64/lib" 添加到./configure 以确保它找到库。您还应该确保可以通过 PATH 环境变量找到 DLL。如果涉及 pkg-config,您可能还需要设置类似 PKG_CONFIG_PATH=&lt;somepath&gt;/lib/pkgconfig

以上是关于尝试为 Windows 10 (x86_64) 静态编译 FFmpeg 4.2.3,但二进制文件要求缺少 DLL的主要内容,如果未能解决你的问题,请参考以下文章

linux samba共享加入windows server 域

在 x86_64 汇编问题中添加双精度

没有可用的二进制红宝石:osx/10.13/x86_64/ruby-2.2.3

在 ARM 上的 Windows 10 上检测 UWP 应用仿真

警告“将架构 arm64 映射到 x86_64”是啥意思?

致命错误:Python.h:没有这样的文件或目录错误:命令“x86_64-linux-gnu-gcc”失败,退出状态为 1