web-dev-qa-db-ja.com

Xcodeでアーキテクチャx86_64のシンボルが重複しています

私は今、上記のタイトルと同じ質問をしていますが、まだ正しい答えを見つけていません。私はエラーを得ました:

    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

任意の助けは大歓迎です。

最後に このエラーの原因を見つけました。-ObjCOther Linker Flagsを追加しました。この値を削除すると、プロジェクトを正常に構築できますが、その理由はわかりません。誰もがこれを説明できますか?

181
lee

アーキテクチャx86_64の75個の重複シンボル

同じ機能を2回ロードしたことを意味します。 -ObjCからOther Linker Flags,を削除すると問題が解消されるので、このオプションは関数が2回ロードされることを意味します。

テクニカルQ&Aより

このフラグにより​​、リンカは、Objective-Cのクラスまたはカテゴリを定義するライブラリ内のすべてのオブジェクトファイルをロードします。このオプションは通常、より大きな実行可能ファイルになりますが(アプリケーションに追加のオブジェクトコードがロードされるため)、既存のクラスのカテゴリを含む効果的なObjective-C静的ライブラリを正しく作成できます。

https://developer.Apple.com/library/content/qa/qa 1490/_index.html

89
David V

私にとっては、 'No Common Blocks'をYesからNoに変更すると(Targets - > Build Settings - > Apple LLVM - Code Generation)、問題は解決した。

239

愚かですが、#importファイルを誤ってどこかで.m編集していないことを確認してください。

230
Adam Waite

私の場合は、このように定数文字列を定義するためのヘッダーファイルを作成しました。

NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

私はstaticを使ってこのシナリオを解決しました:

static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";
45
Sauvik Dolui

私は同じ問題を抱えています。 Xcode 7.2の[Project Target]> [Build Setting]> [No Common Blocks]で、[NO]に変更します。

31
Dr. chamran

これは私が2年前にObjective-Cで開発したプロジェクトの「推奨設定」ポップアップを受け入れたときに起こりました。

問題は、「推奨設定」アップデートを受け入れると、Xcodeが自動的にGCC_NO_COMMON_BLOCKS = YES;などのビルド設定を変更または追加したことです。

これにより、私のアップデートしたプロジェクトではビルドがduplicate symbolエラーで失敗しました。そのため、私は自分のビルド設定でNo Common BlockNOに変更し、エラーがなくなりました。

28
Blaszard

私は、受け入れられた答えが問題に触れているのを見つけました、しかし、私がそれを解決するのを助けませんでした、うまくいけば、この答えはこの非常にイライラする問題を助けるでしょう。

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"同じ関数を2回ロードしたことを意味します。他のリンカフラグから-ObjCを削除すると問題が消えるので、このオプションは関数が2回ロードされることを意味します。"

素人の言葉で言うと、これはプロジェクト内にまったく同じ名前の2つのファイルがあるということです。あるプロジェクトを別のプロジェクトに結合しているのでしょうか。どのフォルダが複製されているかを確認するには、 "duplicate symbols"エラーの上のエラーを見てください。私の場合はBLoginViewControllerでした。

たとえば、下の画像では、2つのBImageViewControllerがありますが、これが問題の原因でした。

削除するとすぐに問題は消えました:)

enter image description here

28
simon_smiley

別のクラスで同じ名前のconst変数を宣言した場合も同様です。

message.mファイル内

const int kMessageLength = 36;

@implementation Message

@end

chat.mファイル内

const int kMessageLength = 20;

@implementation Chat

@end
28
Luca Davanzo

他のリンカーフラグから-ObjCを削除するか、誤って.hではなく.mファイルをインポートしたかどうかを確認してください。

13
CKR666

以下の手順で問題は解決しました。

  1. ターゲット設定でビルドフェーズに移動します。
  2. 「バイナリとライブラリのリンク」に進んでください。
  3. いずれかのライブラリーが2回存在するかどうかを確認してください。
  4. もう一度ビルドしてください。
12
pigeon

重複を見つける最も早い方法は次のとおりです。

  1. ターゲットへ
  2. 構築フェーズに進む
  3. コンパイルソースへ
  4. 重複したファイルを削除してください。
12
J. Goce

@implementationの下で同じ変数を複数のクラスで定義すると、この問題が発生する可能性があります。

9
Shree

私の場合は、同じ場所に2つのファイルがありました。

[ターゲット]> [ビルドフェーズ]> [ソースのコンパイル]を選択し、重複しているファイルを削除します。

8
Nij

Xcode 7.3で開かれたいくつかのレガシープロジェクトに関する私の状況は次のとおりです。

duplicate symbol _SomeEnumState in:

2つの無関係なファイルのリストが続きます。

ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

私にとってそれを解決したのは、enum宣言を以下から変更することでした。

enum SomeEnumState {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
} SomeEnumState;

これに:

typedef NS_ENUM(NSUInteger, SomeEnumState) {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
};

誰かがこれについての説明を持っているならば、私を啓発してください。

8
tadija
  • ターゲットへ
  • ビルド設定を選択
  • "No Common Blocks" を検索し、 _ no _ に選択します。

それは私のために働いた

6

私にとって、Xcode 8の推奨プロジェクト設定で、「No Common Blocks」をYESに更新すると、この問題が発生します。

5
Naveen Shan

私の場合、私は自分のプロジェクトで2つのmain()メソッドを定義し、そのうちの1つを削除することで問題を解決しました。

Juice007と同様に、2つの異なる.mファイルでC型変数を宣言および初期化しました(インポートされませんでした)。

BOOL myVar = NO;

しかし、.mでも@implementationでも、変数を宣言して初期化するこのメソッドは、グローバルスコープを許可します。あなたのオプションは:

  1. スコープをクラスに制限するために、静的として宣言します。

    static BOOL myVar = NO;
    
  2. 初期化を削除します(これにより、2つのクラスがグローバル変数を共有します)。

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
    
  3. プロパティとして宣言します。

    @property BOOL myVar;
    
  4. @interfaceで適切なiVarとして宣言します

    @interface myClass(){
        BOOL myVar;
    }
    @end
    
3
Mars

ポッドリポジトリを追加したときに同じエラーが発生しました

pod 'SWRevealViewController'

gitHubから既に追加されたソースコード(SWRevealViewController)のため。そのため、エラーはソースコードまたはpodリポジトリを削除することで修正されます。

ケース#2:

2回目は、constant in .hファイルを宣言したときにこのエラーが発生しました。

NSString * const SomeConstant  = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...
3
zeeawan

今日、私は同じエラーを受けました。エラーの重要な単語はduplicateです。私はそれを修正します。

1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :

remove reference

3. Add the file to your project again
4. Add the file's .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear
3
guozqzzu

誤って.mファイルをインポートしていないことを確認してください。プロジェクトウィンドウで派生データを削除してから、もう一度ビルドして実行することをお勧めします。

3
JohnVanDijk

この問題を抱えている他の誰にとっても、私はこれらの答えのどれにも私の決心を見ませんでした。

手動で対処された.pbxprojマージの競合が発生した後(不十分ですが)、.pbxproj内の個々のクラスファイルへの参照が重複していました。 Project> Build Phases> Compile Sourcesからそれらを削除することは私のためにすべてを修正しました。

これが誰かに役立つことを願っています。

3
Bengovernment

上記の解決法のどれも私のために働きません、私はちょうどそれを自分で直しました。

自分で作成したcore data modelのシンボルが重複していますが、.xcdatamodeldインスペクタでCodegenプロパティのClass Definitionを選択していますが、それが問題なのです。それから私はManual/Noneを選び、それは修正されました。

これがあなたに役立つことを願っています!

2
foolishBoy

Xcode 6.3.2の場合以下のようにすべての可能性をチェックしました

1:プロジェクトに.mファイルをインポートしていません。

2: から他のリンカフラグ から-ObjCを削除。

3:自分の 派生データ をすべて削除しました。

それでも私は同じエラーを受けています。.pchファイルから変数の宣言を削除することでこのエラーを取り除きました 。私の場合は、.pchファイルでAppDelegateオブジェクトを宣言しました。最後に私はエラーを引き起こす理由を見つけました。だから私は.pchファイルと私のプロジェクト作業魅力から任意の変数の宣言を削除します。

2
Jatin Patel

このエラーを引き起こすもう一つの愚かな間違いはファイルの繰り返しです。誤っていくつかのファイルを2回コピーしました。最初にTargets - > Build Phases - > Compile sourcesに行きました。そこに私は二度そのリスト上のいくつかのファイルとその場所に気づいた。

2
Andrew McKinley

私は.mファイルでconst値を定義したためです。しかし、このconst値を含む別の.mファイルを定義しました。つまり、同じconst値が2つあるということです。このエラーが表示されます。そして私の解決策はconst value.suchの前にキーワード "static"を追加することです:

static CGFloat const btnConunt = 9;

そして、私はそれをこのエラーを報告しないプロジェクトをビルドします。

2
Juice007

私は私がやったのと同じエラーに直面する

1.重複シンボルファイル(クラス名またはフレームワーク名)を、行の上に表示されている末尾からコピーします(アーキテクチャx86_64の場合は重複シンボル)。

2. Find Navigatorに貼り付けてEnterキーを押します

クラスが重複していることがわかりました。重複したクラスを削除して実行しました。

2
GSK

きっとあなたのお役に立てばと思います。

私は同じエラーを得た アーキテクチャx86_64のための3つの重複シンボル

私の場合は、同じプロジェクトの別のファイルからコードをコピーしました。 A.mファイルをB.mにコンパイルした後、コンパイル後にエラーが発生しました。グローバル変数の名前を変更することでエラーを解決しました。

私の場合、このエラーは両方のファイルで同じグローバル変数を宣言しているために起こりました。

私が自分のプロジェクトの中にlobプロジェクトを統合していたときにも、同じ問題が起こります。

enter image description here

実際にはlobプロジェクトにもAFNetworkingファイルがありますので、lobプロジェクトから.mファイルを削除します。

enter image description here

実際には.mファイルは私のプロジェクトのPOd/AFNetworking/.mファイルと競合しています

enter image description here

2
abdulrauf618

このエラーは通常、ライブラリまたはファイルを2回リンクしたときに発生します。エラーの説明には、重複したファイルの名前が表示されます。重複していないことを検索して確認できます。重複が見つかった場合は、安全のためにそれらのいずれかへの参照を削除してください。

2
Arthi

1.ビルドフェーズに移動2.ファイル名を検索3.重複の削除 - >エラーが消えます。

見つからない場合は、「file.m」を検索してください。#import「file.m」が表示されている場合は、この行を消去してください。

2
jonypz

最近、エラーの原因を探す頭痛がありました。私は自分のアプリがコンパイルしたくないことに気付いたとき、私は疑問に思いました。それは、単に、異なるクラスで以下のコードスニペットがあったからです。

dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
    NSTimeInterval interval;
    double second, subsecond;
    struct timespec time;
    dispatch_time_t milestone;


    interval = [date timeIntervalSince1970];
    subsecond = modf(interval, &second);
    time.tv_sec = second;
    time.tv_nsec = subsecond * NSEC_PER_SEC;
    milestone = dispatch_walltime(&time, 0);

    return milestone;
}

誰かに役立つかもしれないことを願っています。

2
Evgeniy Kleban

他のリンカーフラグから-all_loadを削除します。私のプロジェクトで動作します

1
codaman

ヘッダファイルの代わりに[ViewController.m]をインポートしていないことを確認してください。

#import "ViewController.m"
1
WonderX

この答えはなぜこの問題が発生するかについてよく説明したものです:

Xcode C++ ::アーキテクチャx86_64の重複シンボル

私の意見では、フラグをオフにしたりXcodeの設定を変更したり、コードを読み直したり、問題を解決する必要はありません。設定を変更すると、炎症ではなく原因が落ち着くだけです。

1
Mudit Verma

あなたはプラグインフォルダの下のすべてのプラグインをクリアしようとすることができますか?

私のために働いています

0
Ferhat KOÇER

追加したポッドとライブラリを確認してください。 1つ以上のライブラリが繰り返される必要があります。片側から取り外してください。問題を修正します。また、影響を受けるライブラリは、x-codeエラーメッセージの詳細にリストされます。

0
Jebin Benny

私の場合、私は自分のコアデータモデルのエンティティをオブジェクトと同じ名前にしました。それで、私はオブジェクト "Event.h"を定義し、同時にこのエンティティを "Event"と呼びました。私はエンティティの名前を変更しました。

0
Sjakelien

このエラーは、 .cpp fileの代わりに header fileにスコープ解決演算子を持つクラスメソッドを実装したときに起こりました。

PS:そして私はMacbook Yosemite上でC++でプログラミングしていた。

0
eneski