我想使用 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 可执行文件,但它不起作用,我陷入困境。请帮忙。
我也有同样的问题。为了解决这个问题,我尝试禁用所有外部库。
我的配置:
--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
./configure --extra-ldflags=-static
有帮助