将 Unity 5 项目从 windows 移动到 mac 以实施 iOS 导致 "symbol(s) not found for architecture arm64" 错误

Moving unity 5 project from windows to mac to implement iOS results in "symbol(s) not found for architecture arm64" error

我的电脑上有一个用 Unity 5 创建的游戏。它为视频广告实施了 Vungle Unity 插件。它在 Android 上运行得非常好,但是当我复制项目,将其移动到我的 mac,将平台切换到 iOS,并尝试构建它时,我得到了错误: 未找到体系结构 arm64 的符号

我已经研究了好几天了,但在找到解决方案时运气为零。 Unity 中的架构设置为通用,并设置为构建设备 sdk。我正在尝试在 iPhone 5 上进行测试。它在模拟器上运行良好,只是在尝试在真实设备上启动时运行不佳。

这是我得到的完整错误:

Undefined symbols for architecture arm64:
"__vungleClearCache", referenced from:
  _VungleBinding_clearCache_m756 in Bulk_Assembly-CSharp-firstpass_0.o
  _VungleBinding__vungleClearCache_m755 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vungleClearCache_m755)
"__vungleClearSleep", referenced from:
  _VungleBinding_clearSleep_m758 in Bulk_Assembly-CSharp-firstpass_0.o
  _VungleBinding__vungleClearSleep_m757 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vungleClearSleep_m757)
"__vungleEnableLogging", referenced from:
  _VungleBinding_enableLogging_m746 in Bulk_Assembly-CSharp-firstpass_0.o
  _VungleBinding__vungleEnableLogging_m745 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vungleEnableLogging_m745)
"__vungleGetEndPoint", referenced from:
  _VungleBinding__vungleGetEndPoint_m761 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vungleGetEndPoint_m761)
"__vungleIsAdAvailable", referenced from:
  _VungleBinding_isAdAvailable_m748 in Bulk_Assembly-CSharp-firstpass_0.o
  _VungleBinding__vungleIsAdAvailable_m747 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vungleIsAdAvailable_m747)
"__vunglePlayAdEx", referenced from:
  _VungleBinding__vunglePlayAdEx_m750 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vunglePlayAdEx_m750)
"__vunglePlayAdWithOptions", referenced from:
  _VungleBinding__vunglePlayAdWithOptions_m749 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vunglePlayAdWithOptions_m749, _VungleBinding__vunglePlayAdWithOptionsEx_m751 )
"__vunglePlayAdWithOptionsEx", referenced from:
  _VungleBinding__vunglePlayAdWithOptionsEx_m751 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vunglePlayAdWithOptionsEx_m751)
"__vungleSetEndPoint", referenced from:
  _VungleBinding__vungleSetEndPoint_m759 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vungleSetEndPoint_m759)
"__vungleSetSoundEnabled", referenced from:
  _VungleBinding_setSoundEnabled_m744 in Bulk_Assembly-CSharp-firstpass_0.o
  _VungleBinding__vungleSetSoundEnabled_m743 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vungleSetSoundEnabled_m743)
"__vungleStartWithAppId", referenced from:
  _VungleBinding__vungleStartWithAppId_m741 in Bulk_Assembly-CSharp-firstpass_0.o
 (maybe you meant: _VungleBinding__vungleStartWithAppId_m741)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在这方面工作的时间太长了,但效果不是很好。以下是我尝试过的一些方法:

1) 将架构更改为标准架构 (armv7 arm64)

2) 将 "Build active architecture only" 更改为否

3) 将 "Dead code stripping" 更改为否

4) 将 $(inherited) 添加到 "Other Linker Flags"

5) 确保将 VungleSDK.framework 添加到二进制 links

9/26/15

根据我在网上阅读的所有内容,这些错误意味着我应该缺少一个框架,很可能是一个包含 VungleBinding 文件的框架。 VungleBinding.m 文件不是框架的一部分,如果我单独 link VungleBinding.m 文件,我仍然会收到这些错误。但是,此 VungleBinding.m 文件确实包含所提供的错误消息中引用的方法。

9/27/15

好吧,这太棒了……我现在意识到,唯一能正常工作的模拟器是为 iPhone 5 及更早版本提供的。比这更新的任何东西都会给我这个错误:

dyld: Symbol not found: _CloseZStream

就我而言,我能够通过执行以下操作解决此问题:

在 Unity 中为 iOS 构建项目之前,将平台切换到 iOS 之后,确保单击 "Symlink Unity Libraries."

在选中此选项构建应用程序后,我能够使用所有模拟器并构建到设备上。