Unity导出iOS项目至Xcode遇arm64架构VideoPlayer符号未定义错误求助
解决Unity转iOS后Xcode中Undefined symbols arm64的问题
你遇到的核心问题是Xcode无法找到视频播放插件的原生arm64架构实现,那些_VideoPlayerPluginXXX符号都是插件的原生C/OC函数,编译链接时找不到对应的二进制代码。结合你已经尝试的禁用bitcode、重建单场景等操作,给你几个针对性的排查修复步骤:
1. 验证插件库是否支持arm64架构
打开终端,导航到插件的.framework或.a文件所在目录,执行以下命令:
lipo -info YourVideoPlayerPluginLibraryName
如果输出里没有arm64,说明这个插件根本没编译arm64版本——这是最常见的原因。你需要联系插件开发者获取支持arm64的版本,或者如果有插件源码,自己重新编译包含arm64架构的库文件。
2. 确认Unity打包时正确包含了iOS插件
- 在Unity项目中,确保插件的iOS库文件(
.framework/.a)放在Assets/Plugins/iOS目录下。选中文件后,在Inspector面板的Platform Settings中:- 勾选iOS平台
- 设置CPU架构为
ARM64(或Universal,包含arm64)
- 打包后打开Xcode项目,检查
Frameworks, Libraries, and Embedded Content列表里是否有这个插件库。如果没有,手动添加进去,并将其Embed选项设置为Embed & Sign。
3. 检查Xcode链接器设置
- 打开Xcode的Build Settings,找到
Other Linker Flags,确认是否添加了-ObjC或-all_load参数(很多OC编写的插件需要这些参数才能正确加载类别和符号,否则会出现符号缺失)。 - 检查
Library Search Paths,确保插件库所在的路径已经被包含。如果插件是Unity自动导入的,路径应该默认正确,但如果手动移动过文件,需要重新添加对应路径。
4. 核对C#与原生函数的声明一致性
查看Unity中调用插件的C#代码,确认[DllImport("__Internal")]声明的函数名和原生代码中的函数名完全一致(C语言区分大小写)。比如:
[DllImport("__Internal")] private static extern void VideoPlayerPluginRewindVideo();
这里的VideoPlayerPluginRewindVideo必须和原生C/OC代码中的函数名拼写、大小写完全匹配,否则会出现符号找不到的问题。
5. 清理Xcode缓存后重新构建
有时候缓存会导致奇怪的链接错误,执行以下操作:
- 点击Xcode菜单的
Product > Clean Build Folder - 打开Xcode偏好设置,找到
Locations选项卡,点击Derived Data旁边的箭头,删除整个Derived Data文件夹 - 重新编译项目
Undefined symbols for architecture arm64: "_VideoPlayerPluginRewindVideo", referenced from: _MediaPlayerCtrl_VideoPlayerPluginRewindVideo_m3082508113 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginRewindVideo_m3082508113) "_VideoPlayerPluginCurFrameTexture", referenced from: _MediaPlayerCtrl_VideoPlayerPluginCurFrameTexture_m1593954222 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_get_videoTexture_m2577019922 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginCurFrameTexture_m1593954222) "_VideoPlayerPluginDurationSeconds", referenced from: _MediaPlayerCtrl_VideoPlayerPluginDurationSeconds_m2690910420 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_get_duration_m277410481 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginDurationSeconds_m2690910420) "_VideoPlayerPluginPlayerReady", referenced from: _MediaPlayerCtrl_VideoPlayerPluginPlayerReady_m519815871 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_get_ready_m1468627929 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginPlayerReady_m519815871) "_VideoPlayerPluginSetSpeed", referenced from: _MediaPlayerCtrl_Call_SetSpeed_m1821975912 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginSetSpeed_m2537395036 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginSetSpeed_m2537395036) "_VideoPlayerPluginSetVolume", referenced from: _MediaPlayerCtrl_Call_SetVolume_m1145568362 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginSetVolume_m1552845941 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginSetVolume_m1552845941) "_VideoPlayerPluginResumeVideo", referenced from: _MediaPlayerCtrl_Call_RePlay_m309591828 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginResumeVideo_m2823521169 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginResumeVideo_m2823521169) "_VideoPlayerPluginExtents", referenced from: _MediaPlayerCtrl_VideoPlayerPluginExtents_m3404099935 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_get_videoSize_m23492929 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginExtents_m3404099935) "_VideoPlayerPluginPauseVideo", referenced from: _MediaPlayerCtrl_Call_Pause_m3579890352 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginPauseVideo_m1054515433 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginPauseVideo_m1054515433) "_VideoPlayerPluginSetTexture", referenced from: _MediaPlayerCtrl_VideoPlayerPluginSetTexture_m1295528375 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_Call_SetUnityTexture_m2241657163 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginSetTexture_m1295528375) "_VideoPlayerPluginStopVideo", referenced from: _MediaPlayerCtrl_Call_UnLoad_m2955987449 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginStopVideo_m2700854715 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_Call_Stop_m1894964176 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginStopVideo_m2700854715) "_VideoPlayerPluginSeekToVideo", referenced from: _MediaPlayerCtrl_Call_Play_m4289596389 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_Call_SetSeekPosition_m3285971868 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginSeekToVideo_m687589631 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginSeekToVideo_m687589631) "_VideoPlayerPluginIsPlaying", referenced from: _MediaPlayerCtrl_VideoPlayerPluginIsPlaying_m2767458669 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_get_isPlaying_m166503759 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginIsPlaying_m2767458669) "_VideoPlayerPluginError", referenced from: _MediaPlayerCtrl_Call_GetStatus_m1340805735 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginError_m264942449 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginError_m264942449) "_VideoPlayerPluginPlayVideo", referenced from: _MediaPlayerCtrl_Call_Play_m4289596389 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginPlayVideo_m3732859185 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginPlayVideo_m3732859185) "_VideoPlayerPluginFinish", referenced from: _MediaPlayerCtrl_Call_GetStatus_m1340805735 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginFinish_m2746721115 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginFinish_m2746721115) "_VideoPlayerPluginCurTimeSeconds", referenced from: _MediaPlayerCtrl_Call_GetSeekPosition_m2015813757 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginCurTimeSeconds_m495840142 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_get_currentTime_m3530085166 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginCurTimeSeconds_m495840142) "_VideoPlayerPluginDestroyInstance", referenced from: _MediaPlayerCtrl_Call_UnLoad_m2955987449 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_Call_Destroy_m2904930778 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginDestroyInstance_m1744225672 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginDestroyInstance_m1744225672) "_VideoPlayerPluginCanOutputToTexture", referenced from: _MediaPlayerCtrl_Call_Load_m4029719587 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginCanOutputToTexture_m32469285 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginCanOutputToTexture_m32469285) "_VideoPlayerPluginSetLoop", referenced from: _MediaPlayerCtrl_Call_SetLooping_m4176452013 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginSetLoop_m2591582794 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginSetLoop_m2591582794) "_VideoPlayerPluginLoadVideo", referenced from: _MediaPlayerCtrl_Call_Load_m4029719587 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginLoadVideo_m3560986880 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginLoadVideo_m3560986880) "_VideoPlayerPluginCreateInstance", referenced from: _MediaPlayerCtrl_Call_SetUnityActivity_m1877101062 in Bulk_Assembly-CSharp_2.o _MediaPlayerCtrl_VideoPlayerPluginCreateInstance_m3075383955 in Bulk_Assembly-CSharp_2.o (maybe you meant: _MediaPlayerCtrl_VideoPlayerPluginCreateInstance_m3075383955) ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
内容的提问来源于stack exchange,提问作者Raziel




