把嘎嘎 2026-02-22 13:15 采纳率: 42.9%
浏览 7

ffmpeg编译遇到的问题

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

img

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-02-22 13:16
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    在使用 MSYS2 编译 FFmpeg 5.1.4MSVC 版本时,如果 make 命令卡在:

    正在创建库 libavcodec/avcodec.lib 和对象 libavcodec/avcodec.exp
    

    这个现象通常是由于以下原因之一导致的。下面我将详细分析可能的原因,并给出对应的解决方案。


    🔍 可能原因分析

    1. 编译器或构建工具链配置错误

    • 如果你没有正确设置 MSVC 的路径,或者 configure 没有正确识别 MSVC 编译器,可能会导致编译过程异常。
    • 例如:未正确指定 --toolchain=msvc 或者 --cc=cl 等参数。

    2. 资源不足(CPU、内存、磁盘)

    • 在 MSYS2 中进行大规模编译(尤其是 FFmpeg 这种大型项目),如果系统资源不足,比如 CPU 核心数少、内存不够、磁盘空间不足,会导致编译卡住。

    3. 编译任务过于复杂或超时

    • 即使你已经去掉了所有编码器,FFmpeg 的 libavcodec 模块依然包含大量功能,特别是解码器和一些通用模块。
    • 在某些情况下,make 会因为任务调度问题而“卡住”,但实际上仍在后台运行。

    4. Make 工具版本过旧

    • MSYS2 中的 make 如果是旧版本,可能导致编译过程效率低下甚至卡住。

    ✅ 解决方案

    1. 确认 configure 参数是否正确

    确保你在配置阶段使用了正确的 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)。

    2. 检查 MSVC 工具链是否安装

    确保你已安装 MSVC 相关依赖,包括:

    pacman -S mingw-w64-x86_64-toolchain
    

    如果没有安装,make 将无法找到编译器,导致编译卡住。


    3. 增加编译线程数(加快速度)

    默认情况下,make 使用单线程。你可以通过 -j 参数来并行编译:

    make -j $(nproc)
    

    重点提示:

    • nproc 是 MSYS2 中获取 CPU 核心数的命令,可以替换为具体数字(如 -j4)。
    • 并行编译可显著提升编译速度,避免卡住。

    4. 检查系统资源是否充足

    • 内存:确保你的系统内存 ≥ 4GB(建议 8GB 以上)。
    • CPU:至少 2 核以上。
    • 磁盘空间:确保 /home 或编译目录有足够空间(建议 ≥ 10GB)。

    5. 升级 make 工具

    如果你使用的是较老的 make,请更新到最新版本:

    pacman -S make
    

    6. 尝试清理并重新编译

    有时候旧的编译缓存会导致问题,可以尝试清理后重新编译:

    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 工具链。
    • 如果你只是想测试功能,而不是真正部署,可以考虑使用预编译版本(如官方提供的 Windows 构建)。

    ✅ 总结

    | 问题 | 解决方案 | |------|----------| | 编译器配置错误 | 使用 --toolchain=msvc 正确配置 MSVC | | 资源不足 | 确保内存 ≥ 4GB,CPU ≥ 2 核 | | 编译线程不足 | 使用 make -j$(nproc) 并行编译 | | Make 版本过旧 | 更新 make 到最新版本 | | 缓存残留 | 清理后重新编译:make clean |


    如有更多细节(如日志输出、系统信息等),欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 修改了问题 2月22日
  • 创建了问题 2月22日