2015-07-03 75 views
8

以前,我可以毫无问题地构建和运行Unity输出Xcode项目。但现在,苹果需要iOS应用的64位支持,我不得不做以下更改在Unity:通用体系结构项目上具有-ObjC链接器标志会导致Mach-O链接器错误?

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位置?这对我来说很奇怪,因为除了上面提到的那个之外,我没有做任何改变。

有谁知道如何解决这个问题?

另请注意:切换到IL2CPPUniversal体系结构时是否有人遇到编译时间慢?我已经将我的Xcode版本切换到Release(正如有人在线提示的),它仍然是这样。我的代码编译需要很长时间。在我切换到IL2CPP和通用版之前,只花了不到10秒的时间。更新:我需要提及的是,我在我的应用中使用了Chartboost,AdColonyVungle。我做了一些试验,发现从我的Xcode项目中删除-ObjC-fobjc-arc链接器标志修复了Mach-O链接器错误,并且能够再次成功并运行。我得到的warning: directory not found for option虽然仍然存在,但它仍然编译和运行成功,并且ChartboostVungle的所有功能在我的应用程序中完全正常工作。

因为AdColony SDK需要它们,所以我首先获得了这些链接器标志。但删除它们使AdColony停止在我的应用程序中运行。所以它也不是一个干净的解决方案。

这使我相信,无论是2两件事:AdColony Unity插件可以与支持通用/ ARM64架构或-ObjC链接器标记问题不是建设,以通用/ ARM64架构兼容。

如果有人能够澄清这个令人困惑的问题,我将不胜感激。

感谢

+0

它似乎像一些符号重复在梧桐sdk里面。确保你使用的是支持64位的sdk,这看起来像你一样,并尝试清理该项目,然后做一个新的版本 –

+0

@ hades2510感谢您的评论。我做了一个干净的项目,并再次编译,但我收到了同样的错误。虽然我不完全确定最新的VungleSDK是否支持64位。但没有'忽略'对错误的评论,我认为它支持64. – aresz

+0

如何修复重复的符号? – aresz

回答

0

我没有经验,团结,但是当我在我的应用程序得到奇怪的链接错误,我只需要运行一个clean解决这些问题。

+0

感谢您的回答。我已经尝试清洁项目和清洁项目文件夹。但仍然没有运气,我仍然得到同样的错误。 – aresz

3

我认为你在项目中引用了多个引用的Vungle SDKs。你所要做的就是删除其中的一个。如果你认为其中一个比较老,另一个比较新,而不是哪一个,那么删除它们,然后重新导入最新的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被封闭在“”(引号)。检查你的路径,应该看起来像下面的参考图。

注意,路径$(SRCROOT)/../../Assets/Editor/Vungle/VungleSDK没有附上 “”(引号)。

更新1 当您的框架搜索路径中没有正确输入路径时,大多数问题都会发生。在我的情况下,我有多个插件,不仅要检查框架搜索路径,还要检查标题搜索路径和库搜索路径。我也在我的图书馆搜索路径中删除了它们(删除“”时要小心 - “ - 一个错误的删除,你将不得不创建一个新的Xcode项目)。我重视我的其他搜索路径图像

头搜索路径 enter image description here

库搜索路径 enter image description here

+0

感谢您的详细解答。我尝试删除我所有的框架搜索路径,并重新添加Vungle框架。我也确保路径中没有'''''。不幸的是,我仍然遇到了Mach-O链接器错误。 – aresz

+0

我已经更新了答案。即使在修复了Vungle问题之后,我也遇到了Mach-O链接器错误的问题,但在我的例子中,我的unity项目中有多个插件,例如Flurry和Chartboost。看看这可能会解决你的问题。 –

+0

嗯...无论如何,你是否正在为通用(ARMv7和ARM64)架构构建?我认为这个问题可能与AdColonySDK有关。这是因为它需要我放置'-ObjC'链接器标志才能工作。现在,使用该链接器标志,我得到了Mach-O链接器错误。当我删除该链接器标志时,我能够成功构建并运行到我的设备,并且一切运行良好。其结果是,AdColony停止在我的应用程序工作...我已经添加更新的细节到我的问题,因为我发现了这一点。 – aresz

0

我想你可以让你的SDK Search PathsRecursive解决warning: directory not found for option问题。

相关问题