198

Xcode 初心者の質問:

Xcode 4.6.3 は初めての経験です。

ペアリングされた BT デバイスを検索して NSLog に出力する、非常に単純なコンソール プログラムを作成しようとしています。

次のエラーでビルドされます。

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_IOBluetoothDevice", referenced from:
      objc-class-ref in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

狂ったように探しました。一般的な問題は、ヘッダー ファイルのみがインポートされ、リンカによって実装 (*.m ファイル) が見つからないファイルへの参照です。ただし、IOBluetooth ライブラリは、Foundation Framework のような標準フレームワークです。

上記のステートメントで何が欠けていますか?

また、32 ビット マシン用にビルドしようとしました (ビルドは再び失敗します)。これは明らかにリンカー エラーですが、それが何に関連するのかはわかりませんが、x86 と x64 の両方のアーキテクチャで IOBluetoothDevice の実装を見つける際に問題があることを除いて、ヘッダー ファイルは標準の組み込みフレームワークからのものであり、 IOブルートゥース?

参考までに、私のメインコード「main.m」は次のとおりです。

#import <Foundation/Foundation.h>
#import <IOBluetooth/objc/IOBluetoothDevice.h>          // Note the import for bluetooth
#import <IOBluetooth/objc/IOBluetoothDeviceInquiry.h>   // Note the import for bluetooth


int main(int argc, const char * argv[])
{
    @autoreleasepool {
        IOBluetoothDevice *currentDevice;
        NSArray *devices = [ IOBluetoothDevice pairedDevices];


        for (id currentDevice in devices){
          NSLog(@"%i : %@",[ currentDevice classOfDevice ], [ currentDevice name ]);    
        }
    }
    return 0;
}

正しい方向への助けや指針をありがとう。

4

29 に答える 29

18

Xcode 7.2 で、派生データが破損したときにこのエラーが発生することもありました (私の場合、ビルドを中断し、それが根本的な原因であると疑っています)。

したがって、他の解決策 (特に Chris と BraveS の可能性が高いと思われるもの) が問題に合わない場合は、派生データを削除して (選択: ウィンドウ / プロジェクト / 派生データ -> 削除)、再構築してみてください。

(他の人が参照するために追加されました-元の質問が正しく回答されていることを知っています)。

于 2016-01-01T19:34:46.563 に答える
13

私の場合、それはライブラリではなく、いくつかのクラスでした..

アーキテクチャ x86_64 の未定義シンボル:
"_OBJC_CLASS_$_ClassNmae"、参照元: SomeClassName の objc-class-ref . . .

d: アーキテクチャ x86_64 のシンボルが見つかりません

clang: エラー: リンカー コマンドが終了コード 1 で失敗しました (呼び出しを確認するには -v を使用してください)

Xcode に複数のスキーマ ( Production 、 Dev など) を持つ複数のターゲットがありました。新しく追加した実装 ( Class.m ) の一部

Xcode->Targets->Build Phases->Compile Sources

そのため、手動で追加する必要がありました。

その後、正常にコンパイルおよびビルドできました。

于 2016-06-09T12:19:41.307 に答える
6

Xcode 7.1 にアップデートすると、このタイプのエラーが表示される場合があり、上記のどの回答でも解決できません。私の場合の症状の 1 つは、アプリがシミュレーターではなくデバイス上で実行されることでした。使用しているほとんどすべてのフレームワークに関連する膨大な数のエラーが表示される可能性があります。

修正は実際には非常に簡単です。[ターゲット] > [ビルド設定] > [検索パス] セクションにある [フレームワーク検索パス] 設定からエントリを削除するだけです ([すべて] タブが選択されていることを確認してください)。

ここに画像の説明を入力

メイン ターゲットまたはテスト ターゲットの別のエントリ ($(inherited) 以外) がここにある場合は、すべてのターゲットから障害のあるパスを削除して再構築してください。

于 2015-11-04T16:08:07.597 に答える
4

ファイルを削除する代わりに、ファイルへの参照を削除しただけなので、同じエラーが発生しました。Finder でファイルを見つけて削除すると、役に立ちました。

于 2016-01-02T08:09:07.877 に答える
3

C ファイルにリンクしようとしたときにこのエラーが発生した場合は、まず関数名にタイプミスがないか再確認してください。extern C {}次に、コンストラクトを使用せずに C++ / Objective-C++ 環境から C 関数を呼び出そうとしていないことを再確認します。C関数を呼び出そうとしている.mmファイルにあるクラスがあったので、私は髪を引き裂いていました。C++ ではシンボルがマングルされているため、機能しません。実際に nm ツールを使用して生成された具体的なシンボルを確認できます。ターミナルを .o ファイルのパスに移動しnm -g、シンボルを呼び出しているファイルとそのシンボルを持つべきファイルで実行すると、それらが一致するかどうかを確認できます。これにより、エラーの手がかりが得られます。

nm -g file.o

これでデマングルされた C++ シンボルを調べることができます:

nm -gC file.o
于 2016-09-08T23:38:40.620 に答える
1

私にとって、これはマージの競合後に発生し始めました。

ビルドフォルダーをクリーンアップして削除しようとしましたが、どれも役に立ちませんでした。この問題は関係なく発生し続けました。次に、問題のあるグループを削除して参照を再リンクし、プロジェクトに再度追加したところ、機能しました。

于 2017-04-03T15:26:36.917 に答える
1

Undefined symbols for architecture x86_64

I have run on this issue when used CocoaPods with some dependency which did not have specific version, that is why after pod update it downloaded the latest version which included some breaking changes

  • Upgrade dependencies and code for using them
  • Set specific version of pod
  • Remove Derived Data[About] folder
于 2021-04-26T15:57:37.510 に答える
1

#include <windows.h>コンパイルしようとしている .c ファイルにある可能性もあります。

于 2017-04-11T08:21:48.717 に答える