116

Xcode でコンパイルしようとすると、次のエラーが発生します。

  **Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386
    cd /Users/doronkatz/Sites/xCode/iKosher
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher

Undefined symbols for architecture i386:
  "_UTTypeCreatePreferredIdentifierForTag", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_UTTypeCopyPreferredTagWithClass", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassMIMEType", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassFilenameExtension", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_SCNetworkReachabilitySetCallback", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
      -[Reachability stopNotifier] in Reachability.o
  "_SCNetworkReachabilityCreateWithName", referenced from:
      +[Reachability reachabilityWithHostName:] in Reachability.o
  "_SCNetworkReachabilityCreateWithAddress", referenced from:
      +[Reachability reachabilityWithAddress:] in Reachability.o
  "_SCNetworkReachabilityGetFlags", referenced from:
      -[Reachability currentReachabilityStatus] in Reachability.o
      -[Reachability isReachable] in Reachability.o
      -[Reachability isConnectionRequired] in Reachability.o
      -[Reachability isConnectionOnDemand] in Reachability.o
      -[Reachability isInterventionRequired] in Reachability.o
      -[Reachability isReachableViaWWAN] in Reachability.o
      -[Reachability isReachableViaWiFi] in Reachability.o
      ...
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status**

それが何を意味するのかわかりません。

4

18 に答える 18

93

この種のものが突然表示された場合は、通常、プロジェクトに必要なフレームワークが不足していることを意味します。ライブラリと依存プロジェクトにはフレームワークが必要な場合があるため、最近フレームワークを追加した場合、このエラーが発生する可能性があります。

フレームワークを追加するには、プロジェクト ビューでプロジェクト名を右クリックし、Addを選択Existing frameworks...して、リストから選択します。次に、不足しているシンボルを含むフレームワークを見つけます。

必要なフレームワークを見つける方法については、Google を使用するのが最も簡単であることがわかりましたが、おそらく Xcode のヘルプ検索も使用できます。シンボルの 1 つを検索し、マングルされていない名前 (たとえば、) を見つけるために最善を尽くします。SCNetworkReachabilityGetFlagsその後、developer.apple.com で見つけた最初のドキュメント リンクが正しいものであることがよくあります。通常、遠くまで狩る必要はありません。この場合は、次のページです。

https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d

次に、ページの上部に、この場合はどのフレームワークを使用するかが示されますSystemConfiguration。それをプロジェクトに追加して、再度コンパイルします。

あとは、これをうまくいくまで続けてください...

編集:シミュレーターを使用したことはありませんが、これはデバイスで行うことです-同じだと思います...

于 2011-01-29T23:47:46.390 に答える
64

ターゲットにないソース ファイルがある場合があります。

  1. どのシンボルが欠落しているかを調べます
  2. ターゲット -> ビルド フェーズ -> ソースのコンパイル
  3. リストされていない場合は、不足しているソース ファイルを追加します。
  4. 至福のコマンド + b

「不足している」と思われるファイルを選択し、右側のユーティリティ バーで、構築中のターゲットのチェックボックスが選択されていることを確認できます。

于 2011-10-31T15:34:59.947 に答える
50

ASIHTTPRequest を使用しているため、プロジェクトをセットアップする必要があります。ここで第二部を読む

https://allseeing-i.com/ASIHTTPRequest/Setup-instructions

于 2011-01-30T00:01:07.160 に答える
33

次の方法を使用して解決しました(XCode 4の場合):

1) プロジェクト ナビゲーション ウィンドウでプロジェクトを選択すると、右側にプロジェクトの概要が表示されます。

2) 4 番目のタブ ビルド フェーズを選択します

3) [バイナリをライブラリにリンク] オプションを選択します。

4)取得するフレームワークを追加します

5) フレームワークをメイン フォルダーからフレームワーク フォルダーに移動します。

6) 再度ビルドすると、エラーがなくなります。

于 2011-03-28T19:06:03.123 に答える
17

問題は、追加されたフィールドのターゲット メンバーシップがアプリ ターゲットにないことです。そのため、ファイルを選択し、ターゲット メンバーシップのボックスにチェックマークを追加します。

たとえば、common.m のメソッド定義でエラーが表示された場合ここに画像の説明を入力

于 2013-05-08T09:04:55.397 に答える
17

同じエラーに数時間を費やした後、これに対する私の解決策を追加することを考えました:(

最初に確認すべきことは、フレームワークの追加を見逃していないかどうかです。上記の Pruthvid が提供する手順を参照してください。

私の問題は、削除した後にコンパイル クラスが見つからず、後で再度追加したことであることが判明しました。

報告されたエラー クラスについては、「コンパイル ソース」を確認してください。作成した不足しているクラスを追加します。

于 2012-03-20T02:39:59.513 に答える
8

不足しているフレームワークが実際に「ターゲット/ビルド フェーズ/ライブラリとバイナリをリンク」の下にリストされていることを確認してください。前述のように、通常はフレームワークが欠落していることを示しています。

私のプロジェクトでは、2 つの同一のフレームワークがリストされていました。そのうちの 1 つを削除すると、「Link Binary With Libraries」リストからも削除されたため、このエラーが発生しました。追加し直したところ、問題はなくなりました(まだ2つのフレームワークがリストされています)

于 2011-08-16T07:16:49.967 に答える
6

すべてのターゲットの[ビルド設定]>[アーキテクチャ]を変更して、プロジェクトの同様のエラーを修正しました。

問題: Xcode4.4からXcode4.5にアップグレードしたとき、プロジェクトはシミュレーターで正常にコンパイルされましたが、デバイスではコンパイルされませんでした。デバイスでは、誤解を招く「Apple Mach-Oリンカーエラー」および「clang:エラー:リンカーコマンドが終了コード1で失敗しました(呼び出しを確認するには-vを使用)」とともに、「アーキテクチャarmv7sにシンボルが見つかりません」というエラーがスローされました。 )。」

原因(私の場合): 私のプロジェクトには複数のターゲットがあり、メインターゲットの[ビルド設定]> [アーキテクチャ]armv7sアーキテクチャが含まれるように設定されていても、メインターゲットは別のターゲットに依存していました([ビルドフェーズ]> [依存関係]にリストされています)。他のターゲットの[ビルド設定]>[アーキテクチャ]をリセットすることは考えていなかったので、armv7を含めるように変更する必要がありました。シミュレーターとデバイスは異なるアーキテクチャーで実行されていると思います。そのため、デバイスが機能していなくても、シミュレーターは問題ありませんでした。

于 2012-10-31T18:48:17.950 に答える
5

あなたのプロジェクトは別のプロジェクトに依存していますか? また、そのプロジェクトのターゲットは、メイン ターゲットの直接的な依存関係になるように設定されていますか? これが当てはまり、依存関係が設定されていない場合、依存ターゲットがすべての構成 (つまり、シミュレーター) に対してビルドされていない可能性があります。

勝手な推測です。

于 2011-01-29T23:57:14.373 に答える
4

この問題を引き起こす可能性のある別の状況は、コードが C++ を呼び出す場合、または C++ コードによって呼び出される場合です。Obj-C から呼び出されたときに、自分の .c ファイルのユーティリティ関数が「シンボルが見つかりません」と表示されるという問題がありました。修正は、ファイル タイプを変更することでした。Xcode 4 では、拡張情報ペインを使用してファイル タイプを「Objective-C++ Source」に設定します。Xcode 3 では、「Get Info」を使用してファイル タイプを「source.cpp.objcpp」に変更します。

于 2011-04-14T18:13:46.753 に答える
2

このエラーが突然表示された場合は、プロジェクトにいくつかのフレームワークが不足していることを意味します。ライブラリと依存プロジェクトにはフレームワークが必要な場合があるため、最近フレームワークを追加した場合、このエラーが発生する可能性があります。

フレームワークを追加するには、プロジェクト ビューでプロジェクト名を右クリックし、[追加] を選択して、リストから [既存のフレームワーク] を選択します。次に、不足しているシンボルを含むフレームワークを見つけます。

もう 1 つのことは、コンパイルされたリソースにクラスを追加し、そのクラスをプロジェクトから削除すると、エラーが表示されることです。最善の方法は、プロジェクトから削除されたコンパイル リソース (ビルド設定 -> コンパイル ソース) からクラスを削除することです。

私の場合、プロジェクトに admob クラスを追加し、プロジェクトをコンパイルしました。後のケースでは、プロジェクトに admob を含めたくないので、プロジェクトから admob クラスの参照を削除しました。このエラーが発生したとき、コンパイル リソースから admob の .m クラスを削除して、この問題を解決しました。

于 2012-11-29T13:55:23.557 に答える
2

これは、PSPDFKITデモ ライブラリをプロジェクトにコピーしようとしたときに発生しました。サイトのすべての指示とこのページのすべての提案に従いました。何らかの理由で上記のエラーが発生し続けました。問題は、エラーメソッドでメッセージをgrepすると、バイナリにのみ表示されることでした(明らかに、私はソース コードにアクセスできません。b/c の支払いが必要です)。

ただし、説明ページでこれに気付きました:

ここに画像の説明を入力

だから私はその設定ファイルの中身に行き、これを見つけました:

OTHER_LDFLAGS=$(inherited) -ObjC -fobjc-arc -lz -framework CoreText -framework CoreMedia -framework MediaPlayer -framework AVFoundation -framework ImageIO -framework MediaPlayer -framework MessageUI -framework CoreGraphics -framework Foundation -framework QuartzCore -framework AVFoundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -weak_framework UIKit

次に、上記のライブラリの作成者によって提供されたサンプル プロジェクトに行きました..以前のフラグがビルド設定の他のリンカー フラグに逐語的にコピーされていることに気付きました..しかし、私のプロジェクトでは..そうではありませんでした!.それらをプロジェクトのビルド設定の他のリンカーフラグにコピーして貼り付けるだけで、すべてが機能しました!

要点: セットアップで .xcconfig ファイルに依存している場合は、サンプル コード ソースなどで再確認し、それが実際に適用されていることを確認してください..私の場合は適切に適用されませんでした

于 2013-01-14T13:47:48.930 に答える
2

定義済みのテンプレート化されたクラスを使用する C++ プロジェクトで、同じエラーを受け取りながら、プロジェクト ナビゲーターで定義済みのテンプレート化されたクラスを含む .cpp ファイルを選択し、[削除] > [参照の削除] を選択しました。関連する .h ファイルもプロジェクトで参照されますが、次のように .cpp に #include ステートメントを含める必要があります。

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

#include "CircularBufferT.cpp"
#endif /* defined(__CircularBuffer__CircularBufferT__) */

見たい場合は、簡単なプロジェクトの例がgithub にあります:

これはちょっとした間接的な策略であり、この回避策の元のソースを思い出せません。

于 2012-10-11T06:35:39.890 に答える
0

Core.Location フレームワークを追加せずに CLGeocoder を使用していました。基本的に、このエラーには複数の意味があります。これが他の誰かに役立つことを願っています。

于 2013-08-29T05:50:25.823 に答える
0

これが発生する可能性があるもう 1 つの理由は、SDK をアップグレードする場合です。

グループを単純に削除し、新しいフォルダーをプロジェクトにドラッグ アンド ドロップすると、「ライブラリ検索パス」に両方の SDK が含まれます。解決するには、古い SDK パスを削除するだけです。

于 2012-08-24T14:33:01.080 に答える
0

データのみの @interface を追加し、空の @implementation ブロックを追加するのを忘れていたことに気付きました。

于 2014-02-08T01:34:15.857 に答える