【问题标题】:Apple Mach-O Linker (Id) errorApple Mach-O 链接器 (Id) 错误
【发布时间】:2011-10-09 18:52:29
【问题描述】:

第一次遇到此错误,我环顾四周,找不到帮助我的解决方案,我已清理我的构建并检查以确保我正在编译最新固件。

这发生在我厌倦了实施我在 here 上找到的可达性解决方案之后 我导入了两个可达性文件 (.m/.h),然后将此代码添加到 .m 文件中并在 .m 文件中声明了 t。 h 的可达性文件

-(BOOL)reachable {
    Reachability*r =[Reachability reachabilityWithHostName:@"enbr.co.cc"];
    NetworkStatus internetStatus =[r currentReachabilityStatus];
    if(internetStatus ==NotReachable){
        return NO;
    }
    return YES;}

之后,我从我的两个 viwcontrollers viewwillappear 方法中调用了该函数,就像这样..

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];


    //-- Check Reachability START ---->
    Reachability *reach = [[Reachability alloc] init];

    if ([reach reachable]) {
            NSLog(@"Reachable");
    }
    else {
        NSLog(@"Not Reachable");
    }
     //-- Check Reachability END ---->
}

在我尝试在模拟器中构建和运行之前没有产生错误。这是我收到的错误:(

Ld /Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Products/Debug-iphonesimulator/wizcode.app/wizcode 普通 i386 cd "/Users/imac/Documents/Iphone 应用程序/wizsanCode/wizsanCode.5/wizcode" setenv MACOSX_DEPLOYMENT_TARGET 10.6 设置环境路径 "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"

/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Products/Debug-iphonesimulator -F/Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Products/Debug-iphonesimulator -文件列表 /Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Intermediates/wizcode.build/Debug-iphonesimulator/wizcode.build/Objects-normal/i386/wizcode.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -lz -framework CoreGraphics -framework MobileCoreServices -framework SystemConfiguration -framework CFNetwork -framework UIKit -framework 基础-o /Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Products/Debug-iphonesimulator/wizcode.app/wizcode

ld:重复符号 _OBJC_IVAR__Reachability.reachabilityRef 在 /Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Intermediates/wizcode.build/Debug-iphonesimulator/wizcode.build/Objects-normal/i386/Reachability-183E2D17A6B26176.o 和 /Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Intermediates/wizcode.build/Debug-iphonesimulator/wizcode.build/Objects-normal/i386/Reachability-183E2D17A6B26176.o 对于架构 i386 collect2:ld 返回 1 退出状态命令 /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 退出代码 1 ld 失败:重复符号 _OBJC_IVAR__$_Reachability.reachabilityRef 在 /Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Intermediates/wizcode.build/Debug-iphonesimulator/wizcode.build/Objects-normal/i386/Reachability-183E2D17A6B26176.o 和 /Users/imac/Library/Developer/Xcode/DerivedData/wizcode-ccyrqptvfsabmbahgxartbvxwurq/Build/Intermediates/wizcode.build/Debug-iphonesimulator/wizcode.build/Objects-normal/i386/Reachability-183E2D17A6B26176.o 对于架构 i386

命令 /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 退出代码 1 失败

【问题讨论】:

    标签: iphone ios linker mach-o


    【解决方案1】:

    所以,问题已经解决了。

    发生的情况是,当我将可访问性文件导入到我的构建中时,发生了一些有趣的事情,我以某种方式删除了构建中已经存在的可访问性文件,这些可访问性文件被我用来传输我的“all see I”ASIHTTPRequest 方法所使用数据...搞砸了一切。

    长话短说,我替换了文件,一切正常,我还发现 ASIHTTPTequest 正在为我处理可访问性 :) 这太酷了。

    【讨论】:

    • 我需要的答案!!可达性类已经在我项目中的 ShareKit 类中了!
    • 导入 .m 文件时也会发生这种情况 :(
    • 当您有多个目标并且在创建 NSManagedObject 子类操作期间忘记选中所有适当的复选框时,也会发生这种情况。
    【解决方案2】:

    检查SystemConfiguration 是否正确链接。无论如何,清理你的代码:

    + (BOOL)reachable {
        Reachability *r = [Reachability reachabilityWithHostName:@"enbr.co.cc"];
        NetworkStatus internetStatus = [r currentReachabilityStatus];
        return internetStatus != NotReachable;
    }
    

    然后只需在需要的地方致电[Reachability reachable]。这也解决了您的内存泄漏问题。

    【讨论】:

    • 不,在他们的...双重三重检查。
    • 感谢内存泄漏修复,但是这个 Apple Mach-O 链接器 (Id) 错误仍然存​​在。我删除了所有框架并将它们添加回来。这是一个随机错误。
    • 您是否同时为 armv6 和 armv7 构建?
    • 我不确定,这不是我以前读过的东西。我应该寻找什么?
    • 也可能是你导入的是 .m 而不是 .h
    【解决方案3】:

    补充一点,它发生在我重新生成托管子类之后,它实际上并没有覆盖现有的子类,而是制作了新的副本。我只是删除并重新生成,一切都很好。

    【讨论】:

      【解决方案4】:

      修改我的核心数据模型后,我删除了所有(自动生成的)NSManagedObjectModel 子类,并重新创建了它们。一旦它们全部创建完毕,我将它们拖到 XCode 中的 Group 文件夹中……然后旋转沙滩球的时间比平时更长。

      下次我尝试运行时,它因“Mach-O-Linker”(Id)错误而失败。在阅读了其他回复后,我认为这可能与 NSMObj 类没有达到预期有关。我删除了它们,退出,打开,生成它们,然后把它们放在他们习惯的组文件夹中……还有 Viola!没有 Mach-O 错误。

      我看到问题已解决,但我发布此内容只是为了在正确的问题下对其进行索引。就我而言,删除和重新生成(通过编辑器菜单)托管对象子类解决了这个问题。

      【讨论】:

        【解决方案5】:

        删除它然后重新添加它。为我工作。 :D

        【讨论】:

          【解决方案6】:

          当我在我的项目中添加第三方分析框架时,就会发生这种情况。当我检查框架的信息时,它没有正确复制到磁盘上。我下载了新框架并将其复制到项目中,现在没有错误。

          【讨论】:

            【解决方案7】:

            我在我的一个 UIViewController 中有这段代码,删除它解决了这个错误。多么愚蠢且根本不清楚的错误消息

            NS_ENUM(NSInteger, Mode) {
                Assessments = 0,
                Onboarding
            };
            

            【讨论】:

              【解决方案8】:

              确保您运行的是 YourApp.xcworkspace 而不是 .xcodeproj 文件。运行 .xcodeproj 文件时,我确实遇到了同样的问题。运行 .xcworkspace 已解决问题,错误已消失。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-02-26
                • 2011-12-06
                • 1970-01-01
                • 2014-04-06
                相关资源
                最近更新 更多