【问题标题】:Apple Mach-O Linker & Ditto Error - Xcode 8Apple Mach-O 链接器和同上错误 - Xcode 8
【发布时间】:2017-01-25 12:46:36
【问题描述】:

我刚刚将我的 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。 o
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.build/Objects-normal /x86_64/MyApp-Swift.h'
命令 /usr/bin/ditto 失败,退出代码为 1

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

提前致谢!

【问题讨论】:

  • 在项目导航器中,搜索 DownloadsViewController 文件..我认为有相同名称的重复文件..检查一次
  • 不,没有重复文件。

标签: ios swift xcode linker-errors


【解决方案1】:

请确保您的 xcode 中的 Workspace 设置有以下更改:

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

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

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

希望对你有帮助:

【讨论】:

    【解决方案2】:

    对我来说,反应原生触觉是个问题。我认为这是因为 CocoaPods 发生了变化,也因为文件位置发生了变化。我刚刚删除它并重新安装它。希望这对某人有所帮助。

    更新

    构建成功时运行它只会崩溃。为了解决这个问题,我使用了 GoogleService-Info.plist 的 File > Add Files to Project 并且它起作用了。

    【讨论】:

      【解决方案3】:

      按照以下步骤操作:

      第 1 步:转到 Build Phase 选项卡,然后仅展开 Link Binary with Library

      步骤2:然后转到常规选项卡,然后展开链接框架和库 (因为 Yourprojectname.framework 已禁用)

      【讨论】:

        【解决方案4】:

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

        删除 import 语句可以解决问题

        【讨论】:

          【解决方案5】:

          如果您通过构建阶段导入框架,请尝试将其放在项目文件夹中,然后将其添加到带有库的链接二进制文件中。实际上,我之前已经遇到过这个问题,我对这个错误感到非常沮丧,直到我知道我必须将 .framework 放在我的项目文件夹中。 希望能帮到你

          【讨论】:

            【解决方案6】:

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

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

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

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  【解决方案9】:

                  将 Bitcode 设置为“No”解决了这个问题。这可以在构建设置中找到。

                  【讨论】:

                    【解决方案10】:

                    不用担心,只需转到您的项目 targat 然后构建设置和搜索启用位码将其更改为 YES 到 NO。

                    【讨论】:

                      【解决方案11】:

                      确保从.xcworkspace 文件而不是.xcodeproj 打开项目

                      【讨论】:

                      • 我添加了一个需要我安装 CocoPods 的 Cordova 插件。看起来如果您打开 .xcodeproj 文件,它不会引入这些依赖项。如果您打开 .xcworkspace 文件,它会成功构建并且能够成功构建。感谢@Agu Dondo 的提示!
                      • 那么如何从 .xcodeproj 创建 .xcworkspace?
                      • @Graeme Rock。在这种特殊情况下,您必须进行“pod install”。请参考 CocoaPods 社区。它是来自社区的依赖管理器,应该是 Xcode 的一部分 ...
                      【解决方案12】:

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

                      框架仍然在 Target>General Properties>Linked Frameworks 中提醒。我删除了它们 我还从其他链接器标志中删除了 -framework 和相应的框架(保存继承和 objC 标志)

                      希望能帮到你

                      【讨论】:

                      • 之前我将应用目标的名称更改为新的应用名称。我也必须在 pod 文件中更改它。但是旧的 pods 框架仍然列在链接的框架和库中。在我删除它之后,构建开始工作。
                      【解决方案13】:
                      1. 退出 Xcode
                      2. 重启系统
                      3. 选择 Xcode -> 首选项。
                        这将打开一个弹出窗口。选择“位置”。在位置中,您将看到“派生数据”。单击路径旁边的箭头图标。
                        这将打开一个包含“派生数据”的文件夹,将其删除。
                      4. 清洁产品并运行

                      【讨论】:

                      • “您是否尝试将其关闭再打开?” - 感谢您的努力,但没有帮助。
                      • 你试过我上面提到的那些程序吗?
                      • 如果你有项目备份,然后删除 DownloadsViewController 文件,然后从备份复制到你的目标
                      • 你复制了吗?
                      • 好的,让我解释一下!升级到 Xcode8 后,您的项目在链接期间可能无法获取您的 DownloadsViewController 文件路径。因此,最好删除该文件并从备份中重新添加。
                      【解决方案14】:

                      对于我的 react native 应用,我删除了Project NavigatorTargets 中的一个测试项目文件夹。它解决了我的问题。

                      【讨论】:

                      • 这在哪里?
                      • @SoorajChandran 你可以在Project Navigator中看到。
                      【解决方案15】:

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

                      【讨论】:

                      • 这是为我做的
                      • 这就是我的答案。我使用 AppCode 添加了文件。
                      【解决方案16】:

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

                      第 2 步 = 选择项目

                      第 3 步 = 构建设置

                      第 4 步 = 如果 bitcode 为 yes 则搜索启用 bitcode,而不是更改为 No

                      【讨论】:

                        【解决方案17】:

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

                        【讨论】:

                          【解决方案18】:

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

                          我解决了它清理项目。

                          产品 > Clean 或 Shift + Command + K

                          【讨论】:

                            【解决方案19】:

                            使用以下 cmd 清理 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
                            

                            【讨论】:

                              【解决方案20】:

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

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

                              【讨论】:

                                猜你喜欢
                                • 2012-12-31
                                • 2017-11-14
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2015-09-02
                                • 1970-01-01
                                • 2013-06-29
                                • 2014-04-06
                                相关资源
                                最近更新 更多