i386架构下未定义符号

23

可能重复:
符号在 i386 架构下未被找到

我有一个要完成的应用程序,当我尝试通过执行模拟器来理解之前的开发人员所做的事情(我认为是使用 Xcode 3),Xcode 4 显示了 25 个问题:

    Ld build/Debug-iphonesimulator/RadioPlayer.app/RadioPlayer normal i386
    cd /Users/haithembenhammouda/Desktop/SonVidéo
    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/gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/haithembenhammouda/Desktop/SonVidéo/build/Debug-iphonesimulator -L/Users/haithembenhammouda/Desktop/SonVidéo/Classes/RadioKitLib -L/Users/haithembenhammouda/Desktop/SonVidéo -F/Users/haithembenhammouda/Desktop/SonVidéo/build/Debug-iphonesimulator -filelist /Users/haithembenhammouda/Desktop/SonVidéo/build/SonVidéo.build/Debug-iphonesimulator/RadioPlayer.build/Objects-normal/i386/RadioPlayer.LinkFileList -mmacosx-version-min=10.6 -ObjC -Xlinker -objc_abi_version -Xlinker 2 -framework Foundation -framework UIKit -framework CoreGraphics -framework SystemConfiguration -framework MediaPlayer -framework CFNetwork -framework AudioToolbox -framework QuartzCore -lsqlite3.0 -framework AVFoundation -lRadioKit -framework MessageUI -o /Users/haithembenhammouda/Desktop/SonVidéo/build/Debug-iphonesimulator/RadioPlayer.app/RadioPlayer
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_RadioKit", referenced from:
      objc-class-ref in RadioPlayerViewController.o
  ".objc_class_name_UIColor", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(BufferView.o)
  ".objc_class_name_UIView", referenced from:
      .objc_class_name_BufferView in libRadioKit.a(BufferView.o)
  ".objc_class_name_NSObject", referenced from:
      .objc_class_name_ASE_Event in libRadioKit.a(ASE_Event.o)
      .objc_class_name_AudioStreamEngine in libRadioKit.a(AudioStreamEngine.o)
      .objc_class_name_RadioKit in libRadioKit.a(RadioKit.o)
      .objc_class_name_XMLMetaParser in libRadioKit.a(XMLMetaParser.o)
  ".objc_class_name_NSDate", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(AudioStreamEngine.o)
  ".objc_class_name_NSValue", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(AudioStreamEngine.o)
  ".objc_class_name_NSScanner", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(AudioStreamEngine.o)
  ".objc_class_name_NSCharacterSet", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(AudioStreamEngine.o)
  ".objc_class_name_NSAutoreleasePool", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(AudioStreamEngine.o)
      pointer-to-literal-objc-class-name in libRadioKit.a(XMLMetaParser.o)
      pointer-to-literal-objc-class-name in libRadioKit.a(reachability.o)
  ".objc_class_name_NSFileManager", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(AudioStreamEngine.o)
  ".objc_class_name_NSURLConnection", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(AudioStreamEngine.o)
      pointer-to-literal-objc-class-name in libRadioKit.a(XMLMetaParser.o)
  ".objc_class_name_NSThread", referenced from:
      pointer-to-literal-objc-class-name in libRadioKit.a(AudioStreamEngine.o)
  .....(etc)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

顺便说一下:我检查过框架,它们全部都存在。


1
这篇文章有帮助吗?https://dev59.com/TG445IYBdhLWcg3wdqSO - James McCormack
谢谢@JamesMcCormack,那篇帖子帮我解决了问题 :) - CherryQu
4个回答

24

可能有些晚了,但这个错误对某些人来说可能仍然有价值。

我直接将一堆文件复制到Xcode项目中,如果你忘记将它们添加到你的项目Build Phases中,你会收到“Undefined symbols for architecture i386”错误提示。所以把你的实现文件添加到Compile Sources中,将Xib文件添加到Copy Bundle Resources中。

这个错误告诉我我的类没有链接,只是因为它们没有包含在Compile Sources中,非常明显,但可以避免让别人头疼。


5
如果我没有 .m 文件,只有 .a 文件怎么办! - Sam YC
非常感谢您的好建议。 - Mahmud Ahsan
太棒了...我被苹果Mach链接错误困扰了两天。天啊..你救了我 :-) 谢谢 - Abdul Rehman
三年后,这篇帖子对我很有帮助。哇 :) - user3693546

21

在“Build Phases”的“Link Binaries With Libraries”列表中添加所需方法的框架,这样它就可以轻松地工作。就像我已经导入到我的项目中一样。

QuartzCore.framework

针对这个错误:

i386 架构下的未定义符号:


2

显而易见的是,始终检查您的前向类文件的拼写。 有时XCode(至少XCode 4.3.2)会将声明变成绿色,但实际上它的驼峰命名方式是不正确的。 就像这个例子:

"_OBJC_CLASS_$_RadioKit", referenced from:
  objc-class-ref in RadioPlayerViewController.o

如果RadioKit是一个类文件,并且您将其作为另一个文件的属性,在接口声明中,您可能会看到以下内容:
Radiokit *rk;

实际声明应该是没有绿色的"Radiokit"。

RadioKit *rk;

这个错误也会抛出这种类型的错误。另一个例子(在我的情况下)是当您在通用应用程序的类名上有_iPhone和_iPhone扩展名时。一旦我将适当的文件从_iPhone更改为正确的_iPhone,错误就消失了。


-5

我找到了一个解决方案,适用于想要使用xCode 4的人。你所需要做的就是从SimulatorSDK文件夹中导入框架。 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks

我不知道当你尝试在真实的iDevice上测试你的应用程序时是否有效,但我确信它在模拟器上可以工作。

享受吧!


4
这是什么东西?它永远不会起作用。 - Gajendra K Chauhan

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