以前,我能够毫无问题地构建和运行我的Unity输出Xcode项目。但是现在Apple要求对iOS应用程序提供64位支持,我不得不在Unity中进行以下更改:
Build settings -> Player settings -> Other settings -> Scripting backend -> IL2CPP
Build settings -> Player settings -> Other settings -> Architecture -> Universal
现在的问题是我无法在我的设备上成功构建和运行我的Xcode项目。我得到的这个Apple Mach-O linker error
是我以前没有得过的。
这是我从Xcode获得的错误:
ld: warning: directory not found for option '-F-F/Users/user/Desktop/qwer/Frameworks/Plugins/IOS'
ld: warning: directory not found for option '-F"/Users/user/Desktop/qwer/../../Documents/Unity Projects/Unity 5.0.0 projects/MyGame/Assets/Editor/Vungle/VungleSDK"'
duplicate symbol l082 in:
/Users/user/Documents/Unity Projects/Unity 5.0.0 projects/MyGame/Assets/Editor/Vungle/VungleSDK/VungleSDK.framework/VungleSDK(FMDatabase.o)
/Users/user/Documents/Unity Projects/Unity 5.0.0 projects/MyGame/Assets/Editor/Vungle/VungleSDK/VungleSDK.framework/VungleSDK(VungleAdViewController.o)
duplicate symbol l084 in:
/Users/user/Documents/Unity Projects/Unity 5.0.0 projects/MyGame/Assets/Editor/Vungle/VungleSDK/VungleSDK.framework/VungleSDK(VungleVideoPlayer.o)
/Users/user/Documents/Unity Projects/Unity 5.0.0 projects/MyGame/Assets/Editor/Vungle/VungleSDK/VungleSDK.framework/VungleSDK(VungleAdViewController.o)
ld: 2 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
根据我的观察,似乎是VungleSDK
位置的东西?这对我来说很奇怪,因为除了上面提到的那个之外我没有做任何改变。
有谁知道如何解决这个问题?
另请注意:在切换到IL2CPP
和Universal
架构时,是否有人遇到编译时间较慢的问题?我已经将我的Xcode版本转换为Release
(正如有人在网上建议的那样),它仍然是这样的。我的代码编译需要很长时间。在我切换到IL2CPP和Universal
更新:我需要提一下,我在我的应用中使用Chartboost
,AdColony
和Vungle
。我做了一些实验,发现从我的Xcode项目中删除-ObjC
和-fobjc-arc
链接器标志修复了Mach-O链接器错误,我能够再次构建并成功运行。我得到的warning: directory not found for option
仍然存在,但它仍然成功编译并运行,Chartboost
和Vungle
的所有功能都在我的应用中完全正常工作。
我首先拥有这些链接器标志,因为AdColony
SDK需要它们。但删除它们使AdColony停止在我的应用程序中运行。所以它也不是一个干净的解决方案。
这让我相信两件事:AdColony
unity插件可能在支持Universal / ARM64架构方面存在问题,或者-ObjC
链接器标志与构建到Universal / ARM64架构不兼容。 / p>
如果有人能对这个令人困惑的问题有所了解,我将不胜感激。
由于
答案 0 :(得分:3)
我认为您在项目中引入了多个导入的Vungle SDK。您所要做的就是删除其中一个。如果您认为其中一个较旧而另一个较新而不是哪一个,则删除它们,然后重新导入最新的Vungle SDK。
此外,我发现了您发布的日志中的另一个可能问题
ld: warning: directory not found for option '-F"/Users/user/Desktop/qwer/../../Documents/Unity Projects/Unity 5.0.0 projects/MyGame/Assets/Editor/Vungle/VungleSDK"'
您的Vungle SDK的路径似乎包含在“FrameWork搜索路径”中的“”(倒置逗号)中。检查您的路径,如下面的参考图片所示。
请注意,路径$(SRCROOT)/../../Assets/Editor/Vungle/VungleSDK
未包含在“”(引号中)中。
更新1 如果未在Framework搜索路径中正确输入路径,则会出现大多数这些问题。在我的情况下,我有多个插件,不仅要检查框架搜索路径,还要检查标题搜索路径和库搜索路径。我在我的图书馆搜索路径中也有“”并删除了它们(删除“”时要小心 - 一次错误删除,你必须创建一个新的xcode项目)。我附上了其他搜索路径图片
标头搜索路径
图书馆搜索路径
答案 1 :(得分:0)
我没有使用Unity的经验但是当我的应用程序出现奇怪的链接器错误时,我只需要运行clean
来修复它们。
答案 2 :(得分:0)
我想您可以通过将warning: directory not found for option
的SDK设为Search Paths
来解决Recursive
问题。