Apple Mach-O Linker&同上错误 - Xcode 8

时间:2016-09-17 10:43:39

标签: ios swift xcode linker-errors

我刚刚将Xcode更新为Xcode 8,现在正尝试将我的项目代码转换为Swift 2.3。我能够使用Xcode 8构建几次而没有任何错误。现在,出现了以下错误:

错误#1:Apple Mach-O链接器错误:链接器命令失败,退出代码为1

  

ld:找不到文件:/Users/Linus/Library/Developer/Xcode/DerivedData/MyApp-asdjeshhsetnfxbegcsbcipdreneewgr/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects-normal/x86_64/DownloadsViewController。 Ø
   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我甚至不知道.o文件是什么。不过,DownloadsViewController的swift文件就在那里。

错误#2:同上错误:命令/ usr / cin / ditto失败,退出代码为1

  

同上:无法获得源的真实路径' /Users/Linus/Library/Developer/Xcode/DerivedData/MyApp-asdjeshhsetnfxbbciegrfdpdreneewgr/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyApp。建立/对象 - 正常/ x86_64的/ MyApp的-Swift.h'
  命令/ usr / bin / ditto失败,退出代码为1

同上,错误发生3次:MyApp.swiftdocMyApp.swiftmoduleMyApp-Swift.h

提前致谢!

21 个答案:

答案 0 :(得分:41)

  1. 退出Xcode
  2. 重新启动系统
  3. 选择Xcode - >喜好。
    这将打开一个弹出窗口。选择地点'。在地理位置,您会看到“导出的数据”。单击路径旁边的箭头图标 这将打开一个包含'派生数据',删除它的文件夹。
  4. 清洁产品并运行

答案 1 :(得分:27)

确保从.xcworkspace文件而不是.xcodeproj

打开项目

答案 2 :(得分:17)

步骤1 =点击导航菜单中的项目

步骤2 =选择项目

第3步=构建设置

步骤4 =如果bitcode为“是”而不是“

”,则搜索启用bitcode

答案 3 :(得分:10)

以前的答案都没有解决我的问题。 我认为它来自cocoapods podFile的变化,从使用框架到不使用它们

框架仍在目标>常规属性>链接框架中提醒。我删除了它们 我还从其他链接器标志中删除了-framework和相应的框架(保存了inherited和objC标志)

希望可以提供帮助

答案 4 :(得分:5)

更新

Xcode神奇地决定修复错误本身。我的项目再次运行,没有任何错误 我没有做任何能解决这个错误的事情。

答案 5 :(得分:5)

在我的应用程序运行时删除我的应用程序后发生了这种情况。

我解决了清理项目的问题。

产品>清洁或Shift + Command + K

答案 6 :(得分:4)

这是因为在某些时候某些项目文件没有被编译。就我而言,AppDelegate.swift不在编译器中。所以我手动添加它并且它有效。

enter image description here

答案 7 :(得分:1)

对于我的本机应用,我在Project NavigatorTargets中删除了测试项目的文件夹。它解决了我的问题。

答案 8 :(得分:1)

使用以下cmds清理XCode并重建:

rm -rf ~/Library/Developer/Xcode/DerivedData/
killall Xcode 2> /dev/null
killall Instruments 2> /dev/null
killall 'iOS Simulator' 2> /dev/null
killall Simulator 2> /dev/null
killall 'Simulator (Watch)' 2> /dev/null
killall ibtoold 2> /dev/null
killall simctl 2> /dev/null
# There may be others
# Kill the service itself
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService
rm -rf ~/Library/*/CoreSimulator

答案 9 :(得分:1)

不要忘记,只需转到你的项目targat,然后建立设置和搜索启用bitcode将其更改为YES为NO。

答案 10 :(得分:1)

将Bitcode转为"否"解决了这个问题。这可以在构建设置中找到。

答案 11 :(得分:1)

当我将Xcode从之前的版本7更改为新的XCode 8时,我遇到了同样的问题。在新的Xcode(现在是8.3.3)中,编译器中有更多设置。

将项目设置更新为新的Xcode(使用Editor->验证设置)时,将应用这些新设置并将其设置为默认值YES。在此更新后,我遇到了链接器错误!

在我的项目中,我使用Beyond compare(或类似的)比较了.pbxproj文件的先前版本与新版本(在设置验证之后)。

通过这种方式,我可以看到新版Xcode中添加的新设置,并将新设置值设置为NO。在此更新之后,一切正常,链接器错误消失。

答案 12 :(得分:1)

如果您通过Build Phases导入框架,请尝试将其放入项目的文件夹中,并将其添加到带有库的Link Binary中。实际上,我之前已经遇到过这个问题,我对这个错误感到非常沮丧,直到我知道我必须将.framework放在我项目的文件夹中。 希望会有所帮助

答案 13 :(得分:0)

我将项目转换为Current Swift语法(Swift 3)后,我在XCode 8.2.1(版本8C1002)中发现的问题。我只需要在清理后重建它,错误消失了。

答案 14 :(得分:0)

除了清理派生数据和项目以及重新启动xcode之外,我发现将项目重新转换为当前的swift语法并重新安装pod(如果有的话)也有帮助。

要重新转换项目,您需要将swift_version构建设置设置回yes,以便您的目标显示在转换列表中。

答案 15 :(得分:0)

如果清理和禁用bitcode的过程不起作用,那么错误的原因可能只是代码中更复杂的语法错误。

答案 16 :(得分:0)

我遇到了同样的问题,因为我已经定义了一个类(使用@interface),但没有为它提供实现(使用@implementation)。这是一个简单的类,所以即使是一个空的实现也解决了它。

答案 17 :(得分:0)

另外,只需检查您是否在任何类中导入“* .m”实现文件,这可能会导致同样的问题。

删除import语句可以解决问题

答案 18 :(得分:0)

对我而言,反应原生触觉是一个问题。我认为这是因为CocoaPods的变化,也是因为更改了文件位置。我刚删除它并重新安装它。希望这有助于某人。

<强>更新

构建成功时运行它会崩溃。为了解决这个问题,我使用了File&gt;为GoogleService-Info.plist添加文件到项目,它工作正常。

答案 19 :(得分:0)

请确保您在xcode中的“工作区”设置中进行了以下更改:

请转到您的工作区设置并进行以下更改:

工作区设置:    构建系统:      旧版构建系统

每用户工作区   派生数据:     工作区相对位置   建立系统     使用用户设置

希望有帮助:

答案 20 :(得分:-6)

按照以下步骤操作:

步骤1:转到“构建阶段”选项卡,然后仅展开“带库”的“链接二进制文件”

step2:然后转到General标签然后展开Linked Framework&amp;图书馆 (因为Yourprojectname.framework已禁用)