编译msvc版本ffmpeg5.1.4,使用msys2,已经做了裁剪去掉了所有编码器,make后始终卡在:正在创建库 libavcodec/avcodec.lib 和对象 libavcodec/avcodec.exp 这里,半个多小时没反应,这是什么原因,其他模块的动态库都已经编译过了,比如avfilter-8.dll、avutil-57.dll

编译msvc版本ffmpeg5.1.4,使用msys2,已经做了裁剪去掉了所有编码器,make后始终卡在:正在创建库 libavcodec/avcodec.lib 和对象 libavcodec/avcodec.exp 这里,半个多小时没反应,这是什么原因,其他模块的动态库都已经编译过了,比如avfilter-8.dll、avutil-57.dll

下午好🌅🌅🌅
本答案参考通义千问
在使用 MSYS2 编译 FFmpeg 5.1.4 的 MSVC 版本时,如果 make 命令卡在:
正在创建库 libavcodec/avcodec.lib 和对象 libavcodec/avcodec.exp
这个现象通常是由于以下原因之一导致的。下面我将详细分析可能的原因,并给出对应的解决方案。
configure 没有正确识别 MSVC 编译器,可能会导致编译过程异常。--toolchain=msvc 或者 --cc=cl 等参数。libavcodec 模块依然包含大量功能,特别是解码器和一些通用模块。make 会因为任务调度问题而“卡住”,但实际上仍在后台运行。make 如果是旧版本,可能导致编译过程效率低下甚至卡住。确保你在配置阶段使用了正确的 MSVC 配置参数,例如:
./configure --toolchain=msvc --prefix=/usr/local \
--enable-shared --disable-static \
--disable-everything --enable-decoder=h264 --enable-parser=h264 \
--disable-encoders --disable-muxers --disable-demuxers \
--disable-parsers --disable-bsfs --disable-indevs --disable-outdevs
重点提示:
- 使用
--toolchain=msvc来启用 MSVC 编译器支持。- 如果你没有安装 MSVC 工具链,需要先通过 MSYS2 安装它(如
mingw-w64-toolchain)。
确保你已安装 MSVC 相关依赖,包括:
pacman -S mingw-w64-x86_64-toolchain
如果没有安装,make 将无法找到编译器,导致编译卡住。
默认情况下,make 使用单线程。你可以通过 -j 参数来并行编译:
make -j $(nproc)
重点提示:
nproc是 MSYS2 中获取 CPU 核心数的命令,可以替换为具体数字(如-j4)。- 并行编译可显著提升编译速度,避免卡住。
/home 或编译目录有足够空间(建议 ≥ 10GB)。如果你使用的是较老的 make,请更新到最新版本:
pacman -S make
有时候旧的编译缓存会导致问题,可以尝试清理后重新编译:
make clean
make
以下是完整的编译流程示例(适用于 MSYS2 + MSVC):
# 安装依赖
pacman -Syu
pacman -S git base-devel mingw-w64-x86_64-toolchain
# 下载 FFmpeg 源码
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout n5.1.4
# 配置编译选项(仅保留必要组件)
./configure --toolchain=msvc --prefix=/usr/local \
--enable-shared --disable-static \
--disable-everything --enable-decoder=h264 --enable-parser=h264 \
--disable-encoders --disable-muxers --disable-demuxers \
--disable-parsers --disable-bsfs --disable-indevs --disable-outdevs
# 编译并安装
make -j$(nproc)
make install
libavcodec/avcodec.lib 创建阶段,可能是 MSVC 编译器本身的问题,可以尝试更换 MSVC 版本或使用 MSYS2 的 MinGW 工具链。| 问题 | 解决方案 |
|------|----------|
| 编译器配置错误 | 使用 --toolchain=msvc 正确配置 MSVC |
| 资源不足 | 确保内存 ≥ 4GB,CPU ≥ 2 核 |
| 编译线程不足 | 使用 make -j$(nproc) 并行编译 |
| Make 版本过旧 | 更新 make 到最新版本 |
| 缓存残留 | 清理后重新编译:make clean |
如有更多细节(如日志输出、系统信息等),欢迎继续提问!