我在 Xcode 4.6 上有一个 iOS 应用程序,当我最近尝试在 iPhone 6.1 模拟器中构建和运行时,我遇到了“Mach-O 链接器错误”。它继续说:
ld:架构 i386 的 17 个重复符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
有谁知道如何解决这个问题?
非常感谢!
只需转到“构建阶段”->“编译源”并查找类的副本。
检查您的!中是否有“ *.m ”文件。#import
看来是我的错...
在我的例子中,我声明
extern NSString const *keyString
在两个不同的文件中。我重命名了其中一个,它解决了我的问题。
就我而言,它是常数。
NSString *const cellID = @"cellID";
这一行写在两个 .m 文件中。在开始时附加static
关键字后,问题得到解决。
这个问题也可以在新项目中重新创建。您会认为在不同的 .m 文件中定义常量不会产生任何影响,因为它们是私有的。但我不知道编译器如何处理幕后的东西。最重要的是,当您从问题导航器中点击问题时,它不会像处理任何其他问题那样在编辑器中打开页面。真令人沮丧。
我不确定我能给你一个解决方案,但我会分享一个答案,因为我在 xCode 4.6 上也发生了同样的事情。我添加了一个 C 类头文件和实现文件,并将它们包含在 main.c 文件中。然后我决定删除那个新的 C 类头文件和实现。当我最终再次添加一个具有相同名称和函数调用的新 c 类/头文件时,我得到了你的错误。
坦率地说,这可能是一个错误。我修复它的唯一且最快的方法是开始一个新项目并将所有课程拉入。
确保您在多个类中没有具有相同名称的非即时方法(例如,如果我有两个非常相似的视图控制器以便快速移动,我将代码从一个视图控制器复制并粘贴到第二个,它们都有方法称为相同的东西: NSMutableString *filteredStringFromStringWithFilter(NSString *string, NSString *filter)) 然后应用程序会混淆使用哪些方法,因为它们都是可用的,在第二个类上重命名它并更改任何调用该类上的方法,您已经消除了混乱。难道我们都不想让事情变得更清楚!
如果您想在两个不同的类中更改一个值。请记住使用静态关键字进行标记。
否则clang会在下面抛出这样的错误,没有任何值解释。</p>
Apple Mach-O Linker Error clang:错误:链接器命令失败,退出代码为 1
当你重构一个类函数时,你有时也会得到这个错误。只需转到产品-> 清理并重建。
构建阶段”->“编译源”单击按钮“验证设置”
它会修复你的项目