【问题标题】:Having -ObjC linker flag on Universal Architecture project results in Mach-O Linker error?在 Universal Architecture 项目中使用 -ObjC 链接器标志会导致 Mach-O 链接器错误?
【发布时间】:2015-07-03 12:18:55
【问题描述】:

以前,我能够毫无问题地构建和运行我的 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 位置有关?这对我来说很奇怪,因为除了上面提到的之外,我没有做任何更改。

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

另外附注:是否有人在切换到 IL2CPPUniversal 架构时遇到编译时间缓慢的问题?我已经将我的 Xcode 版本切换到 Release(正如有人在网上建议的那样),它仍然是这样。我的代码编译需要很长时间。在我切换到 IL2CPP 和 Universal 之前只花了不到 10 秒的时间

更新:我需要提到我在我的应用程序中使用了ChartboostAdColonyVungle。我做了一些实验,发现从我的 Xcode 项目中删除 -ObjC-fobjc-arc 链接器标志修复了 Mach-O 链接器错误,并且我能够再次成功构建和运行。我得到的warning: directory not found for option 仍然存在,但它仍然编译并成功运行,ChartboostVungle 的所有功能都在我的应用程序中完全运行。

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

这让我相信两件事:AdColony unity 插件可能在支持 Universal/ARM64 架构方面存在问题,或者 -ObjC 链接器标志与构建到 Universal/ARM64 架构不兼容。

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

谢谢

【问题讨论】:

  • 似乎有些符号在 vungle sdk 中重复。确保您使用的是支持 64 位的 sdk,这看起来就像您一样,并尝试清理项目,然后进行新构建
  • @hades2510 感谢您的评论。我对项目进行了清理并再次编译,但我收到了同样的错误。虽然我不完全确定最新的 VungleSDK 是否支持 64 位。但是没有ignoring cmets 的错误,我认为它确实支持64。
  • 如何修复重复的符号?
  • 您是否尝试将 Unity 更新到最新版本?根据您的口味,它应该是 5.1.1 或 4.6.7
  • 是的,我尝试更新到最新版本。结果还是一样。

标签: xcode unity3d adcolony


【解决方案1】:

我认为您的项目中引用了多个导入的 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 当在您的框架搜索路径中未正确输入路径时,大多数这些问题都会发生。就我而言,我有多个插件,不仅要检查框架搜索路径,还要检查标题搜索路径和库搜索路径。我的库搜索路径中也有“”并删除了它们(删除“”时要小心——一个错误的删除,你将不得不创建一个新的 xcode 项目)。我附上了我的其他搜索路径图片

标题搜索路径

图书馆搜索路径

【讨论】:

  • 感谢您的详细解答。我尝试删除所有框架搜索路径并重新添加 Vungle 框架以确保。我还确保路径中没有""。不幸的是,我仍然收到 Mach-O 链接器错误。
  • 我已经更新了答案。即使在修复了 Vungle 问题后,我也遇到了 Mach-O 链接器错误的问题,但在我的情况下,我的统一项目中有多个插件,例如Flurry 和 Chartboost。看看这可能会解决您的问题。
  • 嗯...您是否正在为通用(ARMv7 和 ARM64)架构构建?我认为问题可能与 AdColonySDK 有关。这是因为它需要我放置 -ObjC 链接器标志才能使其工作。现在,使用该链接器标志,我得到了 Mach-O 链接器错误。当我删除该链接器标志时,我能够在我的设备上成功构建和运行,并且一切运行良好。结果是 AdColony 停止在我的应用程序中工作......自从我发现这个问题以来,我已经向我的问题添加了更新的详细信息。
  • 您是否正在为通用(ARMv7 和 ARM64)架构构建?您的任何插件是否要求您将-ObjC 链接器标志放入您的 Xcode 项目中?如果是这样的话,我想我可能已经缩小了这个问题的可能罪魁祸首。
  • 是的,我所有的构建都是针对通用架构的(因为这是现在的要求)。但是我的插件都不需要我添加 -ObjC 链接器标志。
【解决方案2】:

我没有使用 Unity 的经验,但是当我的应用程序出现奇怪的链接器错误时,我只需要运行 clean 来修复它们。

【讨论】:

  • 感谢您的回答。我已经尝试清理项目并清理项目文件夹。但仍然没有运气,我仍然遇到同样的错误。
【解决方案3】:

我想您可以通过将 SDK 的 Search Paths 设置为 Recursive 来解决 warning: directory not found for option 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 2014-11-07
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2014-04-06
    相关资源
    最近更新 更多