如何在MSYS2环境下静态编译Windows下的ffmpeg?

问题描述 投票:0回答:2

我想使用 MSYS2 环境工具从官方 git 源代码为 Windows 构建独立的静态链接 ffmpeg 二进制文件。但每次我得到动态链接到 mingw 库的 .exe 文件时,即使我放置了所需的 libbz2-1.dll、libiconv-2.dll 和 libwinpthread-1,该文件也会崩溃并出现“应用程序无法正确启动(0xc000007b)”错误。 dll 库位于其文件夹中。

我正在运行 MSYS2 环境

msys2_shell.cmd -mingw64

行,并使用 mingw64/mingw-w64-x86_64-gcc 8.2.1+20181214-1 编译包。然后我运行 ./configure

./configure --pkg-config-flags=--static --disable-shared --enable-static

line - 我在谷歌上搜索过的最好的选择。然后继续一般

make
make install

序列。

因此,我获得了在 MSYS2 环境本身中顺利运行的二进制文件,但是当我从主机 Windows 资源管理器或 cmd 运行它时,它首先要求 libbz2-1.dll、libiconv-2.dll 和 libwinpthread-1。 dll 库,当我将它们放入二进制文件的文件夹中时,它们崩溃并出现“应用程序无法正确启动(0xc000007b)”错误。

我已经在官方https://ffmpeg.zeranoe.com/forum/viewtopic.php?f=5&t=6439论坛询问过这个案例,但已经5天了仍然没有回复。

关于动态链接库,我得到了创可贴解决方案,从 mingw64\x86_64-w64-mingw32\lib 文件夹中删除 *.dll.a 文件。但对我来说看起来不太干净。我想知道是否可以使用某些编译器/make/链接器参数或以某种方式编辑 ./configure 或 Makefile 文件来进行静态链接?

此外,0xc000007b 错误仍然存在。

我已经成功地使用基于相同 MSYS2 环境的 media-autobuild_suite 获得了所需的结果,所以我知道可以以某种方式做到这一点。但我对所有这些 *nix 东西都很陌生,所以根本不理解它的 bash 脚本,更不用说它本身就非常复杂。我唯一看到的是它生成在本机 Windows 环境下运行的正确 ffmpeg 可执行文件,不需要上面列出的 dll。

根据我目前在互联网上找到的所有指南,我应该使用此工具集获得独立的 Windows 可执行文件,但它不起作用,我陷入困境。请帮忙。

ffmpeg mingw static-linking mingw-w64 msys2
2个回答
1
投票

我也有同样的问题。为了解决这个问题,我尝试禁用所有外部库。

我的配置:

--enable-static --enable-gpl --disable-w32threads --disable-autodetect

编译后,我将 /mingw64/bin 中的 libwinpthread-1.dll 复制到二进制文件的文件夹中。 (您可以使用

ldd ffmpeg.exe
打印共享库依赖项)

ffmpeg.exe和ffprobe.exe可以成功运行。

使用 ffmpeg-4.4 和 msys2-x86_64-20210419


0
投票

./configure --extra-ldflags=-static

有帮助

© www.soinside.com 2019 - 2024. All rights reserved.