Windows10下用MSVC2017编译FFmpeg时make报错求助
我之前在Windows上用MSVC编译FFmpeg时也踩过类似的坑,结合你给出的信息,咱们一步步来排查解决这些错误:
1. 先确认configure是不是真的“完全成功”
虽然你说configure没有报错,但有时候一些不起眼的警告会导致部分构建文件生成失败。建议重新跑一遍configure,把所有输出存下来仔细检查:
./configure --toolchain=msvc 2>&1 | tee configure_log.txt
打开生成的configure_log.txt,重点搜索WARNING或者ERROR关键词,尤其是和ffbuild目录生成、依赖检测相关的内容。比如如果pkg-config没正确识别依赖,或者某个工具检测失败,都可能导致library.mak这种核心构建文件不生成。
2. 排查MSYS工具的兼容性问题
你用的是稳定版MSYS,这里要注意:FFmpeg的MSVC编译流程更适配MSYS2,旧版MSYS的工具(比如make)版本可能太低,和FFmpeg的configure脚本兼容性不好。
- 先检查你的make版本:
make --version
如果版本低于4.0,建议直接换成MSYS2,然后通过包管理器安装全套工具:
pacman -S make diffutils gcc pkg-config nasm yasm
MSYS2的工具更新更及时,适配FFmpeg的构建流程会顺畅很多。
3. 确保PATH环境变量的优先级正确
你已经修复了link.exe的PATH,但要注意:MSVC的工具链路径必须排在MSYS工具路径前面,不然编译时可能会混用GCC和MSVC的工具,导致构建混乱。
- 从MSVC 2017的x64命令提示符启动MSYS(或MSYS2),执行以下命令查看PATH:
echo $PATH
确认MSVC的bin目录(比如/c/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/bin/HostX64/x64)在MSYS的/usr/bin之前。如果不是,手动调整:
export PATH="/c/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/bin/HostX64/x64:$PATH"
4. 彻底清理残留后重新构建
有时候make distclean可能没删干净旧的残留文件,导致新的构建冲突。建议手动删除所有生成的构建文件:
rm -rf ffbuild Makefile config.* *.o *.obj
然后重新执行configure,再用多线程编译加快速度:
./configure --toolchain=msvc make -j$(nproc)
5. 确认c99-to-c89工具的配置
你已经装了c99conv和c99wrap,要确保它们在PATH里且能被configure检测到。去之前生成的configure_log.txt里搜c99conv,看是否有checking for c99conv... yes的输出。如果没有,把你的工具目录加到PATH最前面:
export PATH="/home/Antoine/bin:$PATH"
6. 检查FFmpeg源码的完整性
如果以上步骤都没用,可能是你下载的源码包有损坏或者缺失文件。建议重新下载FFmpeg的稳定版源码(比如4.4.x或5.x系列),解压后再从头走一遍编译流程。
按照这些步骤排查,应该能解决library.mak缺失和目标模式不匹配的问题。
内容的提问来源于stack exchange,提问作者Antwane

