我尝试编译从GitHub获得的UE4项目代码。按照官网的步骤执行了setup.bat,然后调用GenerateProjectFiles.bat生成了工程文件,但是再编译时遇到了error C3859: 超过了 PCH 的虚拟内存范围的错误(我的环境是Win10 + VS2017)。
首先说下产生这个错误的原因: 为了提升编译速度使用了预编译头,但由于预编译头文件比较多导致pch文件超过了默认值。
一般工程的解决方案时在VS中修改/Zm(指定预编译头的内存分配限额):确定编译器分配的用于构造预编译头的内存量。格式:/Zmfactor。
factor:一个离散的比例因子,确定编译器用于构造预编译头的内存量。
factor的值 内存分配限制
10 7.5 MB
100 75 MB
200 150 MB
1000 750 MB
2000 1500 MB
但是UE4的编译并非直接使用VS编译,而是使用UnrealBuildTool进行的(编译配置文件信息请参见官网: https://docs.unrealengine.com/zh-CN/Programming/BuildTools/UnrealBuildTool/BuildConfiguration/index.html),根据官网介绍可知相关编译参数的配置是在BuildConfiguration.xml中配置的。
正如文档中所述BuildConfiguration.xml有两个一个在: xxxxUnrealEngineEngineSavedUnrealBuildToolBuildConfiguration.xml 另一个在
C:UserssanmuAppDataRoamingUnreal EngineUnrealBuildToolBuildConfiguration.xml
这里有两种改法:
一, 关闭使用PCH这样可能导致编译速度明显下降
- <?xml version="1.0" encoding="utf-8"?>
- <Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
- <BuildConfiguration>
- <bUseSharedPCHs>false</bUseSharedPCHs>
- </BuildConfiguration>
- </Configuration>
二. 设置预编译头内存
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<WindowsPlatform>
<PCHMemoryAllocationFactor>100</PCHMemoryAllocationFactor>
</WindowsPlatform>
</Configuration>
但设置这个值,一定要根据自己的电脑配置情况设置,如果设置完这个值仍然报错 类似 pch虚拟内存分配失败之类的可以手动设置此盘符下的虚拟内存页面。具体方法是 右键我的电脑/高级系统设置 / 高级/性能 设置/高级/虚拟内存 更改/ 自定义驱动器分页大小(我设置的是64M-2927M)设置完成后重启电脑重新编译即可