web-dev-qa-db-ja.com

アーキテクチャi386の未定義シンボル

可能性のある複製:
アーキテクチャ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

PS:フレームワークをチェックしましたが、すべて存在しています。

23
highthem

パーティーには少し遅れましたが、このエラーのある人にとっては価値があるかもしれません。

たくさんのファイルをXcodeプロジェクトに直接コピーしただけです。それらをプロジェクトビルドフェーズに追加するのを忘れると、「アーキテクチャi386の未定義シンボル」というエラーが表示されます。そのため、実装ファイルをコンパイルソースに追加し、Xibファイルをバンドルリソースのコピーに追加します。

エラーは、コンパイルソースに含まれていなかったという理由だけでクラスへのリンクがなかったことを教えてくれました。本当に明らかですが、頭痛の種を救うかもしれません。

24
StuR

プロジェクトターゲットで使用されるメソッドに必要なフレームワークを、ビルドフェーズの[ライブラリとバイナリをリンク]リストに追加すると、簡単に機能します。プロジェクトにインポートしたように

QuartzCore.framework

バグについて

アーキテクチャi386の未定義シンボル:

21
Rajesh

明白に聞こえるリスクがありますが、フォワードクラスファイルのスペルを常に確認してください。 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に変更すると、エラーはなくなりました。

2
whyoz