Apple Mach-O链接器(Id)错误

时间:2011-07-20 21:53:05

标签: iphone ios linker mach-o

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

这是在我累计实施了here找到的可达性解决方案之后发生的 我导入了两个可访问性文件(.m / .h),然后将此代码添加到.m文件中并在其中延迟了。 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       setenv PATH   “/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 /用户/ iMac电脑/库/开发商/ Xcode中/ DerivedData / wizcode-ccyrqptvfsabmbahgxartbvxwurq /编译/产品/调试,iphonesimulator   -F /用户/ iMac电脑/库/开发商/ Xcode中/ DerivedData / wizcode-ccyrqptvfsabmbahgxartbvxwurq /编译/产品/调试,iphonesimulator   -filelist   /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 in   /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 in   /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失败

8 个答案:

答案 0 :(得分:8)

所以,问题已经解决了。

当我将可访问性文件导入到我的构建中时,发生了一些有趣的事情,并且我以某种方式删除了我的构建中已经使用的“可见性”ASIHTTPRequest方法使用的可访问性文件。数据......搞砸了一切。

这么长的故事简短我替换了文件,一切正常,我也发现ASIHTTPTequest正在为我提供可达性:)这有多酷。

答案 1 :(得分:2)

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

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

然后只需在您需要的地方拨打[Reachability reachable]即可。这也解决了你的内存泄漏问题。

答案 2 :(得分:1)

只是为了补充一点,在我重新生成托管子类之后它发生了,它实际上并没有覆盖现有的子类,而只是创建了新的重复项。我刚刚删除了两个并重新生成,这一切都很好。

答案 3 :(得分:0)

修改核心数据模型后,我删除了所有(自动生成的)NSManagedObjectModel子类,并再次创建它们。一旦它们全部被创建,我将它们拖到XCode中的一个Group文件夹中...并且比平常更长时间地使用旋转的沙滩球。

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

我看到问题已解决,但我发布此信息只是为了在正确的问题下对其进行索引。在我的例子中,删除和重新生成(通过编辑器菜单)托管对象子类修复了问题。

答案 4 :(得分:0)

将其删除,然后重新添加。适合我。 :d

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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