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


219

上記のタイトルで同じ質問がありますが、正しい答えはまだ見つかりません。エラーが発生しました:

    /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)

どんな助けでもありがたいです。

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


正確には、リンカは75回以上、複数回定義されたシンボルに遭遇しました。これはおそらく、何かをした(#includeまたは#import、MoboSDKなど、何であれ)2回以上したためです。
ravron、2014年

このエラーはGoogleConversionTrackingSDK-iOS-3.0、プロジェクトに追加した後に発生します。その前に、問題はありません。それも削除しようとしましたが、エラーは引き続き発生します。
lee

それはあなたのケースではありません、グーグルのSDKを追加する前に、私のプロジェクトは大丈夫です。
lee

Adam Waiteからの2番目の答えは本当に簡単です。どこかに#importされた.mファイルがないことを確認してください。
Bogdan

私の場合、2つの別々のクラスで同じ文字列配列名を使用しようとしました。クラスの1つで配列名を変更すると、このエラーは削除されました。
希望

回答:


109

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

同じ関数を2回ロードしたことを意味します。問題として削除した後に消えて -ObjCからOther Linker Flags, 、このオプションの結果その機能の負荷が二度あること、この意味:

テクニカルQ&Aから

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

https://developer.apple.com/library/content/qa/qa1490/_index.html


1
つまり、xcodeプロジェクト内のオブジェクトファイルを必ず削除してください。
鎖骨の仮説2014年

5
それも私にとっては機能しますが、他のライブラリは-ObjCフラグに依存しています。したがって、このフラグをプロジェクト設定で保持する必要があります。他の解決策を提案していただけませんか?
Sunil Targe

3
すべてのライブラリを確認する必要があると思います。重複するリンカーエラーが発生した場合、2つ以上のライブラリに同じソースコードがあることを意味します。
David V

Target-> Build Phases-> Link Binary with Libraries with Librariesで問題があったReactライブラリの一部を削除する必要がありました。これは、Reactのカカオポッドのインストールと競合していたためです。
コティエンブリー

私の場合、.mファイルをインポートしています。愚かな間違い。.hファイルをインポートしたら ビルドの準備ができました!! ありがとう
Ravi

261

私にとって、「共通ブロックなし」を「はい」から「いいえ」に変更すると(「ターゲット」->「ビルド設定」->「Apple LLVM-コード生成」で)、問題が解決しました。


3
これは私の問題を解決しました。に戻す必要はありNOますか?この背後にある理由は何ですか?
Hemang 2015

3
はい、これは問題を解決しますが、その背後にある理由は解決しません。constを定義した場合は、definitonに問題がないことを確認してください。私の場合、「extern」を忘れただけです。これはSauvik Doluiの回答で言及されています。
coco

10
Xcode 8は自動更新の1つとしてこの変更を促し、ビルドを壊しました:/
pkamb

1
2時間を費やした後、この問題はこの回答により解決されました。ありがとう
Manish Pathak

1
これは機能しますが、ターゲットとプロジェクトでそれを変更する必要がありました
Nooblhu

251

ばかげているが、誤ってどこかにファイルを#import編集していないことを確認する.m


3
私はこれを実行していませんでしたが、この解決策は、誤って.hファイルの@interfaceブロックの外側で変数を宣言するという私がやったことを見つけるのに役立ちました。
スクーター

単体テストを使用すると、.mファイルのみが生成されます。これは最善の解決策ではないようですが、ベーステストクラスを作成したかったのですが、ヘッダーファイルを作成しました。
Bruno Muniz 2017

私がそのような愚かな間違いをした可能性について私の心を啓発してくれて本当にありがとう。
ダニエルリマ

プロジェクト間インポートの.mファイルはどうですか?
noveleven

54

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

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

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

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

2
これで問題は解決しました。私は、接頭辞がextern代わりにstaticextern NSString * const kNotificationName;。どのuは通常、接頭辞を追加していない、そしてそれは罰金を働いていたので、奇妙な..です
user1244109

これは、何らかの理由で私の問題を解決しました。ありがとう。コンパイラが、まったく関連がないように見える重複シンボルよりも良い応答を出すことができなかった理由がわかりません。
サイレン

@ Sirens、LLVMコンパイラからのより良いエラーメッセージも期待していました。とにかく私は幸運にも2日後にエラーを見つけることができました。:(
Sauvik Dolui、2015年

これは私の問題でもありましたが、実際の問題はなぜこれが原因ですか?
Fatlad 2015

のすべての変数AppStrings.hが定数である場合、これは問題ありませんが、ヘッダーファイルを含むすべてのソースファイルには変数の独自のコピーがあるため、グローバルな可変変数が必要な場合、混乱を招きます。それは悪い解決策です。
trojanfoe 2016年

32

受け入れられた回答が問題に触れていることを発見しましたが、それを解決するのに役立ちませんでした。うまくいけば、この回答がこの非常にイライラする問題に役立つでしょう。

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

「同じ関数を2回ロードしたことを意味します。他のリンカーフラグから-ObjCを削除すると問題が解決するため、このオプションを選択すると、関数が2回ロードされます。」

簡単に言えば、これはプロジェクト内にまったく同じ名前の2つのファイルがあることを意味します。たぶん、あなたはあるプロジェクトを別のプロジェクトに結合していますか?「シンボルの重複」エラーの上のエラーを見て、どのフォルダーが重複しているかを確認します。私の場合は、BLoginViewControllerでした。

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

私がそれを削除するとすぐに、問題は消えました:)

ここに画像の説明を入力してください


2
大きな助け、ありがとう。ココアポッドを使用するプロジェクトのバックアップを作成しました。Xcodeでバックアップをリロードしたときにワークスペースを開く必要があることを忘れて、ビルドできないことがわかったので、AFNetworkingをプロジェクトに直接追加しました。その後、依存関係としてAFNetworkingを含むココアポッドを再セットアップし、プロジェクトに追加した元のAFNetworkingフォルダーを削除するのを忘れました。
JanB、2015

32

同じ問題があります。Xcode 7.2のパスプロジェクトターゲット>ビルド設定>共通ブロックなしで、NOに変更します。


4
これは私の問題でした。これは、Xcode 8が設定した設定でした。ありがとう!
ロバートJ.クレッグ

30

別のクラスで同じ名前のconst変数を宣言する場合にも発生します。

ファイルMessage.m

const int kMessageLength = 36;

@implementation Message

@end

ファイルChat.m

const int kMessageLength = 20;

@implementation Chat

@end

1
constではありませんが、変数名を変更するとうまくいきました
Oktay

私はこれを、2つの異なるクラスの@implementationで定義された自分のクラス変数のポインタを使って作成しました
ammianus

コンパイル時に、コンパイラーはヘッダー(.h)ファイル内の重複シンボル(ここではグローバル変数)のみをチェックします。ただし、リンク時に、実装(.m)ファイルの(グローバル)変数もチェックされ、重複がある場合、リンカーはエラーを介して実行します。重複シンボル_xyz
PANKAJ VERMA

30

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

問題は、「推奨設定」の更新を受け入れたときに、Xcodeが自動的に一部のビルド設定を変更または追加したことでした。 GCC_NO_COMMON_BLOCKS = YES;でした。

これにより、duplicate symbol更新されたプロジェクトでエラーが発生してビルドが失敗しました。だから私は自分のビルド設定に変更No Common BlockNO、エラーはなくなりました。


3
ええ、これは私を助けました。Xcode 8は、古いプロジェクトを推奨設定に更新しました。これを元に戻し、また行きましょう。ありがとう!
ゾルタン2017年

2
よくやった。とても助かりました!あなたのための賛成票!;-)
ヘレンウッド

1
華麗な仲間:)
Burf2000

16

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

  1. ターゲットに移動
  2. ビルドフェーズに進みます
  3. ソースのコンパイルに移動
  4. 重複するファイルを削除します。

ああ、これは私のケースでした、本当にありがとう!今私はあなたに私の人生の4時間といくつかのビールを借りています:)
Miroslav

1
歓迎しますが、飲まないので感謝します:)幸せなコーディング。
J.ゴース2017

さらに数時間を追加します。
CJ_COIMBRA

私のために働いた!ありがとうございました!
しのばせる

15

次の手順で問題が解決しました。

  1. ターゲット設定のビルドフェーズに進みます。
  2. 「バイナリとライブラリのリンク」に移動します。
  3. ライブラリが2つ存在するかどうかを確認します。
  4. もう一度ビルドします。

13

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


1
なぜ、-ObjCフラグが機能しないのか疑問に思っている皆さん、この回答に注意してください。私の考えは完全に間違っていました。「超特殊」の場合、ObjCフラグは機能しません。プロジェクトでsmthを検索した後.m"、.hの代わりに.mファイルをインポートしたことに気づき、修正した後、正常に機能したことを確認しました。Talk is cheap, show me the code!乾杯!
bgplaya

9

Xcode 7.3で開かれたレガシープロジェクトの状況は次のとおりです。

duplicate symbol _SomeEnumState in:

その後、2つの無関係なfile.oのリストが続き、これが数回繰り返され、最後に:

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

私にとってそれを解決したのは、列挙型宣言を次のように変更することでした:

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

これに:

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

誰かがこれについて説明があれば、教えてください。


同じことが私のためにそれを修正しました、私が列挙型をtypedef NS_ENUMに切り替えたとき、それは重複シンボルエラーを修正しました
Mark24x7

9

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


しかし、なぜ?同じことが、同じ名前のプレーンなC関数で発生しました
vib

9

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

[ターゲット]> [ビルドフェーズ]> [ソースをコンパイル]をクリックし、重複ファイルを削除します。



7

Cocoapodsをインストールした後、この問題が発生しました。一部のポッドを更新するたびに発生します。私が見つけた解決策:

端末に移動:

1) pod deintegrate
2) pod install

また、ビルド設定の「Always Embed Swift Libraries」をチェックしてください。デフォルトの設定を使用していることを示す「フェード」する必要があります。手動のYESに設定されている場合は、[削除]をクリックしてデフォルトの構成に戻します。これは動作を停止しました。


これでうまくいきました。ただし、「Always Embed Swift Libraries」はすでにNOに設定されています。私はそれをYESに切り替えてから、削除を押してから、上記のポッド機能を実行しました。
BVB09

5

Xcode8で推奨されているプロジェクト設定中に私が「共通ブロックなし」をYESに更新すると、この問題が発生します。


Xcode8.2.1の場合も同じで、古いプロジェクトに適用されます。
onekiloparsec 2017

これにより、XCode 11.3.1でも修正されました
LowFieldTheory

5

今日も同じエラーが出ました。エラーのキーワードは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 :

参照を削除

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

ありがとう!私の場合、私は2つのmain.mをコンパイルしました。これはドラッグアンドドロップが原因でした。
トング

4

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


4

この問題が発生している他の人のために、私はこれらの答えのいずれにも私の解決策を見ませんでした。

手動で対処された.pbxprojマージの競合が発生した後(不十分ではあります)、. pbxproj内の個々のクラスファイルへの重複した参照がありました。それらをプロジェクト>ビルドフェーズ>ソースのコンパイルから削除すると、すべてが修正されました。

これが将来の誰かを助けることを願っています。


また、競合のマージがあり、pbxprojファイルで手動で解決する必要がありました。で終わりましたld: X duplicate symbols for architecture x86_64。エラーメッセージに記載されているソースファイルを削除し、プロジェクトに再度追加することで修正しました。
kas-kad 2017

4

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. @インターフェイスで適切なiVarとして宣言します

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


3

最近、エラーの原因を探す頭痛がしました。さまざまなクラスに次のコードスニペットがあるために、自分のアプリがコンパイルしたくないことがわかったとき、私は不思議に思いました。

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;
}

それが誰かを助けるかもしれないことを願っています。


小さなヘルパー関数、誤ってコピーされ、見落とされやすい-ありがとう!
スティーブンA.ロウ

3

間違いなくあなたのお役に立てば幸いです

アーキテクチャx86_64で同じエラー3重複シンボルが発生しました

私の場合、同じプロジェクトの別のファイルからコードをコピーしました。AmファイルのコードをBmに変換し、コンパイル後に言及したようにエラーが発生しました。グローバル変数の名前を変更してエラーを解決しました。

私の場合、両方のファイルでグローバル変数の宣言が同じであるため、このエラーが発生しました。


3

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

pod 'SWRevealViewController'

gitHubから追加済みのソースコード(SWRevealViewController)の場合。したがって、エラーはソースコードまたはポッドリポジトリを削除することで修正されます。

ケース2:

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

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

Case 2ndで一晩助かった。ありがとう!
Pankaj Yadav

3

上記の答えは私にはうまくいきませんでした。ここに私がそれを回避する方法があります:

1)Finderで、Podsフォルダー全体とPodfile.lockファイルを削除します2)xcodeプロジェクトを閉じます3)ターミナルでpod installを実行します4)xcodeプロジェクトを開き、clean buildコマンドを実行します

その後私のために働きました。


2

プロジェクト内にlobプロジェクトを統合していたときに、同じ問題が発生します。

ここに画像の説明を入力してください

実際、lobプロジェクトにはAFNetworkingファイルも含まれているため、.mファイルをlobプロジェクトから削除します。

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください


2

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

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

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

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

それでも同じエラーが発生します。ファイルから変数宣言を削除して、このエラーを削除しました.pch。私の場合、AppDelegateオブジェクトを.pchファイルに宣言しました。最終的に私はエラーを引き起こす理由を見つけました。だから私は.pchファイルと私のプロジェクト作業チャームから変数の宣言を削除します。


2

このエラーの原因となるもう1つの愚かな間違いは、ファイルの繰り返しです。一部のファイルを誤って2回コピーしました。まず、ターゲット->ビルドフェーズ->ソースのコンパイルに行きました。そこに私はそのリストのいくつかのファイルとその場所に気づきました。


誰かがあなたに反対票を投じた理由がわかりません。これで私の問題は解決しました。
Yawar、2016年

2

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

static CGFloat const btnConunt = 9;

次に、このエラーを報告しないプロジェクトをビルドします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.