为何Xcode 15编译Unreal Engine项目出现弃用代码报错?
解决UE3在Xcode15中因废弃内置函数导致的编译错误
你的问题是因为Xcode15搭载的Clang编译器废弃了__has_trivial_copy这类旧的内置检测函数,同时UE3开启了-Werror选项把警告直接当成错误抛出。不用改数百行代码,有几个实用方案:
方案1:临时禁用废弃警告(最快实现)
直接在项目编译设置里忽略这个警告即可:
- 打开Xcode,进入项目的Build Settings
- 找到Other C++ Flags,添加参数:
-Wno-deprecated-builtins - 如果是通过UE的Build.cs配置编译选项,在对应模块的
PublicAdditionalCompilerArguments里加上"-Wno-deprecated-builtins"
这样编译器就不会把这些废弃警告当成错误,项目就能正常构建。
方案2:修改引擎的3个头文件(适配新编译器,改动极小)
报错只涉及3个引擎头文件,每个文件仅需修改1行代码,完全不用改数百行:
- 打开
IsTriviallyCopyConstructible.h:
把__has_trivial_copy(T)替换为__is_trivially_copyable(T) - 打开
IsTriviallyDestructible.h:
把__has_trivial_destructor(T)替换为__is_trivially_destructible(T) - 打开
IsTriviallyCopyAssignable.h:
把__has_trivial_assign(T)替换为__is_trivially_assignable(T)
修改后引擎代码就能适配Xcode15的新编译器,长期来看比禁用警告更稳妥。
方案3:回退到旧版本编译器(权宜之计)
如果不想改任何代码或设置,可以切换回Xcode14的编译器:
- 在Xcode的Build Settings里找到Compiler for C/C++/Objective-C
- 选择Apple Clang - Legacy Compiler,或者手动指定Xcode14的工具链路径
不过这个方案只是临时规避问题,不推荐长期使用,毕竟新编译器会带来更多优化和兼容性修复。
内容的提问来源于stack exchange,提问作者d0g
相关产品推荐
相关产品推荐

