Unity 2023.2.3+Xcode15.0.1编译iOS项目出现il2cpp未定义符号错误求助
核心解决步骤
这类错误属于链接阶段缺失il2cpp相关符号,通常和Unity编译配置、Xcode架构设置、第三方插件冲突有关,以下是针对性修复方案:
1. 校准Unity的il2cpp配置
- 打开Unity编辑器,进入
Edit > Project Settings > Player > iOS > Other Settings - 确认
Scripting Backend设置为IL2CPP(而非Mono) - 仅勾选
Architecture中的ARM64(Xcode15已废弃32位架构支持) - 点击
Player Settings底部的Reset to Defaults,重置iOS配置后重新导出Xcode项目
2. 清理缓存重建
- Unity端:执行
File > Build Settings > Clean Build删除旧产物;删除项目根目录的Library、Temp文件夹,重启Unity后重新构建 - Xcode端:打开项目后执行
Product > Clean Build Folder(快捷键Cmd+Shift+K);删除Derived Data(路径:Xcode > Settings > Locations > Derived Data)
3. 排查第三方插件冲突
- 检查项目中含原生iOS代码的插件(
.framework/.a文件)是否支持ARM64:
终端执行命令:lipo -info 插件路径/xxx.a,确认输出包含arm64 - 移除近期新增的插件,逐步排查冲突源;更新旧版本第三方SDK至兼容Unity2023和Xcode15的版本
4. 调整Xcode链接设置
- 打开导出的Xcode项目,进入
Build Settings - 搜索
Other Linker Flags,添加-force_load "$(SRCROOT)/Libraries/libiPhone-lib.a"(强制加载libiPhone-lib.a的所有符号) - 确认
Build Active Architecture Only:Debug模式设为Yes,Release模式设为No - 确保
Valid Architectures仅保留arm64
5. 验证Unity il2cpp模块完整性
- 导出Xcode项目时勾选
Development Build和Script Debugging,查看构建日志是否有il2cpp编译错误 - 若日志显示il2cpp编译失败,通过Unity Hub重新安装对应版本的iOS Build Support模块
原始错误日志:
Undefined symbols for architecture arm64:
"_il2cpp_add_internal_call", referenced from:
scripting_add_internal_call(char const*, void const*) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_array_class_get", referenced from:
scripting_array_class_get(ScriptingClassPtr, unsigned long) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_array_element_size", referenced from:
scripting_array_element_size(ScriptingClassPtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_array_length", referenced from:
scripting_array_length(ScriptingArrayPtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
scripting_array_length_safe(ScriptingArrayPtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_array_new", referenced from:
scripting_array_new(ScriptingClassPtr, unsigned long, unsigned long) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_assembly_get_image", referenced from:
MonoManager::LoadAssemblies() in libiPhone-lib.a(Runtime_Scripting_3_4ia5l.o)
"_il2cpp_class_array_element_size", referenced from:
scripting_class_array_element_size(ScriptingClassPtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_class_enum_basetype", referenced from:
scripting_class_enum_basetype(ScriptingClassPtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_class_from_name", referenced from:
scripting_class_from_name(ScriptingImagePtr, char const*, char const*) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
MonoManager::GetScriptingClass(char const*, char const*, char const*) in libiPhone-lib.a(Runtime_Scripting_3_4ia5l.o)
"_il2cpp_class_from_system_type", referenced from:
scripting_class_from_systemtypeinstance(ScriptingSystemTypeObjectPtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_class_from_type", referenced from:
scripting_class_from_type(ScriptingTypePtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_class_get_assemblyname", referenced from:
scripting_class_get_assemblyname(ScriptingClassPtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
"_il2cpp_class_get_declaring_type", referenced from:
scripting_class_get_declaring_type(ScriptingClassPtr) in libiPhone-lib.a(Runtime_ScriptingBackend_Il2Cpp_0_4ia5l.o)
内容的提问来源于stack exchange,提问作者venky chowdary

