You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译未修改的MPC-BE源码时出现C1017错误求助

编译未修改的MPC-BE源码时出现C1017错误求助

大家好,我最近在尝试给开源播放器MPC-BE加个外部程序读取播放状态的功能,严格按照官方Compilation.txt和README的步骤编译源码,结果遇到了一堆C1017错误,折腾了好久没解决,来求助各位大佬!

先给大家理清楚我的操作和环境:

  • 系统:Windows 11 Pro 64位(日语区域)
  • 编译工具:VS2022 Community 17.10.1,装了Desktop C++、MSVC v143、Windows SDK 10.0.22621.0、ATL/MFC;MinGW GCC14.2.1放在C:\MSYS,环境变量也配置好了,update_gcc.bat运行成功
  • 源码:用git clone --recursive拉的master分支
  • 构建命令:PowerShell里执行
    .\build.bat Clean All NoWait
    .\build.bat Build Packages NoWait
    

结果一堆错误,都是类似这样的:

Error,C1017,invalid integer constant expression,VideoRenderers,include\Version.h,65

我把文件路径简化后,发现所有错误都指向Version.h第65行,而且我完全没改过源码!

后来我打开Version.h和自动生成的revision.h一看,终于找到问题了:

Version.h里有这么一段预处理器判断:

#if MPC_VERSION_STATUS == 1 && MPC_VERSION_REV == 0

而MPC_VERSION_REV是REV_NUM的别名,再看revision.h里的定义,居然是:

#define REV_NUM long

这哪是整数常量啊!预处理器在处理#if的时候,需要的是具体的数字,结果拿到的是long这个关键字,直接就报错C1017了!

再看revision.h里其他宏,都是git命令字符串,比如REV_DATE是"""git.exe"" log -1 --date=format:%Y-%m-%d --pretty=format:%ad",这明显是模板里的占位内容,根本没被替换成实际的git提交信息!

问题原因

MPC-BE的构建脚本本来应该自动调用git命令,把当前分支、提交数、日期这些信息生成正确的revision.h,但可能因为我的环境里git没在全局PATH里,或者构建脚本执行时没正确调用到git,导致生成revision.h的步骤失败,直接用了默认的模板内容,才会出现这种错误。

解决步骤

我试了两种方法都成功了,给大家分享:

方法一:手动修正revision.h

直接把revision.h里的占位内容改成实际的常量,比如我自己的分支是master,提交数是1890,日期是2024-06-10,就改成这样:

#pragma once
#define REV_DATE "2024-06-10"
#define REV_BRANCH "master"
#define REV_HASH "a1b2c3d"
#define REV_NUM 1890

改完之后再重新运行构建命令,错误就消失了。

方法二:让构建脚本自动生成正确的revision.h

  1. 先确保git.exe在系统的PATH环境变量里:打开命令提示符,输入git --version,如果能正常显示版本号就没问题;如果不行,就把git的安装目录(比如C:\Program Files\Git\cmd)加到系统PATH里,重启PowerShell。
  2. 删除当前的revision.h文件
  3. 进入MPC-BE源码根目录,运行下面的PowerShell命令,手动触发生成正确的revision.h:
# 获取提交计数作为REV_NUM
$revNum = git rev-list --count HEAD
# 获取最后一次提交的日期
$revDate = git log -1 --date=format:%Y-%m-%d --pretty=format:%ad
# 获取当前分支名
$revBranch = git symbolic-ref --short HEAD
# 获取短提交哈希
$revHash = git rev-parse --short HEAD
# 写入revision.h
@"
#pragma once
#define REV_DATE "$revDate"
#define REV_BRANCH "$revBranch"
#define REV_HASH "$revHash"
#define REV_NUM $revNum
"@ | Out-File -Encoding utf8 revision.h
  1. 然后再运行.\build.bat Build Packages NoWait,就能正常编译了。

现在我已经成功编译出MPC-BE的安装包了,希望这个解决方法能帮到遇到同样问题的朋友!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 10:58:00