架构为i386的未定义符号:“_OBJC_CLASS_ $ _ZipException”,引用自:错误

3
我正在项目中使用一些“.o”文件,在编译时出现以下错误:
error:linker command failed with exit code 1 (use -v to see invocation)

我已发布以下错误日志
Ld /Users/deepak/Library/Developer/Xcode/DerivedData/app-bnwpvhpbrfdurbdgxucyddqyfosh/Build/Products/Debug-iphonesimulator/app.app/app normal i386
    cd /Users/deepak/Workspace/iosDevelopement/PROJECTS/KML/app
    setenv IPHONEOS_DEPLOYMENT_TARGET 4.3
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk -L/Users/deepak/Library/Developer/Xcode/DerivedData/app-bnwpvhpbrfdurbdgxucyddqyfosh/Build/Products/Debug-iphonesimulator -F/Users/deepak/Library/Developer/Xcode/DerivedData/app-bnwpvhpbrfdurbdgxucyddqyfosh/Build/Products/Debug-iphonesimulator -F/Users/deepak/Workspace/iosDevelopement/PROJECTS/KML/app -filelist /Users/deepak/Library/Developer/Xcode/DerivedData/app-bnwpvhpbrfdurbdgxucyddqyfosh/Build/Intermediates/app.build/Debug-iphonesimulator/app.build/Objects-normal/i386/app.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=4.3 -lstdc++ -licucore -lz -framework MapKit -framework CoreLocation -framework QuartzCore -framework UIKit -framework Foundation -framework CoreGraphics -framework KML -o /Users/deepak/Library/Developer/Xcode/DerivedData/app-bnwpvhpbrfdurbdgxucyddqyfosh/Build/Products/Debug-iphonesimulator/app.app/app
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_ZipException", referenced from:
      objc-class-ref in ZipFile.o
      objc-class-ref in ZipReadStream.o
      objc-class-ref in ZipWriteStream.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

最初出现了更多错误,通过导入libs.dylib框架来解决,但仍有2个错误存在。
编辑:我已经阅读过流行的问题Undefined symbols for architecture i386: _OBJC_CLASS_$_SKPSMTPMessage", referenced from: error,但这个解决方案对我不起作用。
有人知道我错在哪里吗?这是Xcode的问题,缺少库还是链接失败?
提前感谢。

1
使用 -v 查看调用方式 - 请执行此操作。并向我们展示结果。 - user529758
1
你可以将它添加到连接器标志中(如果你使用Xcode,进入Build phases,有一些地方可以插入附加的链接器选项)。 - user529758
1
我们能看到一些代码吗?错误是使用了Objective C类,如果您按照标题和问题所述编写C语言,则不可能这样做。 - mmmmmm
2个回答

39
错误信息显示未定义的符号被 ZipFile.o, ZipReadStream.oZipWriteStream.o 引用。这意味着您正在尝试在应用程序中使用Objective-Zip库。
未定义的符号是_OBJC_CLASS_$_ZipException。编译器在源文件中看到@implementation ZipException指令时生成此符号。
Objective-Zip库包括一个名为ZipException.m的文件,其中包含@implementation ZipException指令。
最可能的解释是您没有将ZipException.m包含在目标中。请确认是否已经包含。如果您不知道如何操作,请查看此答案
另一个可能的解释是,您已经修改了ZipException.m文件,可能是不小心修改,使其删除了@implementation ZipException指令或将其隐藏在编译器之外。请确保您没有修改该文件,并且它包含@implementation ZipException指令。

2
但我没有.m文件,它是一个库!我该怎么办? - Sam YC
2
我缺少了实现。 - hfossli
谢谢!"OBJC_CLASS$_"之后的类名是导致问题的原因。 - ullstrm
有趣的是,当我取消选中并重新选中“目标成员”复选框以针对“丢失”的.m文件时,我的这个问题得到了解决。Xcode中的某些东西出了问题,即使它显示为已选择,它也没有将该文件包含在构建中 :) - SaltyNuts
当我替换了一个NSManagedObject子类时,Xcode毫不客气地删除了我的两个目标(!) 这也帮助我触发了一个答案,所以谢谢! - JohnQ
感谢上帝,8岁的儿子/女儿回答了问题。 - Zachary Bell

0
我提供的解决方案听起来很奇怪,而且我花了一段时间才真正尝试它,但它对我有用。这仅在您解决了所有框架链接问题的情况下才有效。对于我来说是这样,但我仍然遇到了一些Mach-O错误。
我所做的是从链接的框架和库(iOSTarget中的常规选项卡)中删除所有库,然后通过将它们从左侧窗格拖到链接的框架和库空间中添加它们回来。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接