Xcode持续报错:arm64架构下符号未找到,请求排查解决
symbol(s) not found for architecture arm64.
arm64架构下的未定义符号:
"_gvr_set_default_viewer_profile", 引用自:
_GvrCardboardHelpers_SetViewerProfile_m5325167020DC962236959852F91D9C553C51216D 在 Bulk_Assembly-CSharp_0.o中
_GvrCardboardHelpers_gvr_set_default_viewer_profile_m07028866FB149E1AC5CECE15964D0B9EE8A6CA97 在 Bulk_Assembly-CSharp_0.o中
(也许您指的是:_GvrCardboardHelpers_gvr_set_default_viewer_profile_m07028866FB149E1AC5CECE15964D0B9EE8A6CA97)
"_gvr_get_time_point_now", 引用自:
_AndroidNativeKeyboardProvider_gvr_get_time_point_now_m06805997F8027305F0BD844EDD089F6EAC7536EB 在 Bulk_Assembly-CSharp_0.o中
_AndroidNativeKeyboardProvider_UpdateData_mA2A2F254C6FA0B2037353C0419FC438E985E3E01 在 Bulk_Assembly-CSharp_0.o中
(也许您指的是:_AndroidNativeKeyboardProvider_gvr_get_time_point_now_m06805997F8027305F0BD844EDD089F6EAC7536EB)
"_gvr_reset_tracking", 引用自:
_GvrCardboardHelpers_Recenter_m99630154B89B72845D010213CA5A263D3969058D 在 Bulk_Assembly-CSharp_0.o中
_GvrCardboardHelpers_gvr_reset_tracking_m787C501547F2AF315F6CB1F8DDA59F7FCD9032AF 在 Bulk_Assembly-CSharp_0.o中
(也许您指的是:_GvrCardboardHelpers_gvr_reset_tracking_m787C501547F2AF315F6CB1F8DDA59F7FCD9032AF)
ld: symbol(s) not found for architecture arm64
嘿,这个问题我前阵子刚踩过坑!本质上是Xcode在编译arm64架构的App时,找不到Google Cardboard(GVR)相关的原生库符号,下面是几个亲测有效的解决步骤:
1. 检查GVR原生库的架构支持
首先得确认你引入的GVR库(不管是.a静态库还是.framework框架)是否包含arm64架构。打开终端,用lipo命令检查:
lipo -info /路径/到/你的/gvr/库文件
如果输出里没有arm64,那说明这个库本身不支持arm64,要么换一个兼容arm64的版本,要么自己重新编译GVR源码生成包含arm64的库。
2. 确认Unity的构建设置(从错误文件看是Unity导出的项目)
如果你是从Unity导出的Xcode项目,先回到Unity里检查Player Settings:
- 切换到iOS平台
- 在
Other Settings的Architecture选项里,选择ARM64(不要选Universal或者仅ARMv7) - 重新导出Xcode项目,避免因为Unity导出时的架构不匹配导致问题
3. 调整Xcode的Build Settings
打开导出的Xcode项目,进入Build Settings面板:
- 找到
Architectures,确保设置为arm64 - 找到
Valid Architectures,确认里面包含arm64(如果这个选项没显示,可能需要在Xcode的Build Settings右上角勾选All和Combined) - 找到
Linking下的Other Linker Flags,检查是否有正确的GVR库链接参数,比如-lgvr或者对应库的名称,有时候Unity导出会漏掉这个,手动加上试试
4. 清理缓存后重建
Xcode的缓存经常会搞出奇怪的问题,先做这几步:
- 按下
Cmd+Shift+K清理Build Folder - 点击Xcode顶部菜单的
Xcode→Preferences→Locations,找到Derived Data,点击旁边的箭头打开文件夹,删除对应项目的Derived Data文件夹 - 重启Xcode,然后重新Build项目
5. 检查GVR插件版本兼容性
如果你用的是Unity的GVR插件,确保插件版本和你的Unity版本兼容,并且是支持arm64的最新版本。旧版本的GVR插件可能没有适配arm64架构,更新插件后再重新导出试试
内容的提问来源于stack exchange,提问作者Joep Dongen

