ffmpeg - 如何使用 MSYS2 环境为 Windows 静态编译 ffmpeg?
问题描述
我想使用 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/linker 参数或以某种方式编辑 ./configure 或 Makefile 文件进行静态链接?
0xc000007b 错误仍然存在。
我已经设法使用基于相同 MSYS2 环境的 media-autobuild_suite 获得了预期的结果,所以我知道有可能以某种方式做到这一点。但是我对所有这些 *nix 东西都很陌生,所以根本不明白它是 bash 脚本,更不用说它本身就相当复杂了。我看到的唯一一件事是生成在本机 Windows 环境下运行的正确 ffmpeg 可执行文件,不需要上面列出的 dll。
根据我目前在互联网上找到的所有指南,我应该使用这个工具集获得独立的 Windows 可执行文件,但它只是不起作用而且我被卡住了。请帮忙。
解决方案
我有同样的问题。为了解决这个问题,我尝试禁用所有外部库。
我的配置:
--enable-static --enable-gpl --disable-w32threads --disable-autodetect
编译后,我将libwinpthread-1.dll从/mingw64/bin复制到二进制文件的文件夹中。(您可以使用ldd ffmpeg.exe
打印共享库依赖项)
ffmpeg.exe 和 ffprobe.exe 可以成功运行。
使用 ffmpeg-4.4 & msys2-x86_64-20210419
推荐阅读
- angular5 - 在 Asp.net core 1.0 中集成 Angular 5
- javascript - Vuetify 扩展面板无法一次扩展一个
- javascript - 打印二叉搜索树中最长路径的时间复杂度
- ajax - 使用外部 API 处理 Angular 4 中的跨域问题
- haskell - 高效的惰性字节串生成,以随机字节串为例
- html - 自定义 Google 搜索栏结果不可点击
- sql - SQL server 获取数据库中超过 450 个 Unicode 字符或 900 个字节的所有列
- javascript - 在日历 ExtJs 6 中添加 2 周视图
- redux - 如何检测用户离开网站?
- c# - 在实体框架中将行转换为列