56

このエラーに関連する google と stackoverflow でいくつかの投稿を見てきました。それらすべてを読みましたが、まだ問題を取得しています。解決策があれば幸いです。コンパイル時に表示されるエラーメッセージは次のとおりです...

オプション '-L/Users/somefolder/Documents/Bharat/MyApp copy/GoogleAdMobAdsSDK' の重複シンボル _OBJC_CLASS_$_AppDelegate のディレクトリが見つかりません: /Users/madept/Library/Developer/Xcode/DerivedData/Alpha-dvvymdlmzseytagllsmbbrxdgutz/Build/Intermediates/ Alpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o

ありがとう。

4

24 に答える 24

234

このエラーがよく発生するもう 1 つの理由は、誤って .h ファイルではなく .m ファイルをインポートしたことです。

于 2012-10-07T19:52:42.033 に答える
57

手順:

  1. ターゲット設定のビルド フェーズを確認します。
  2. ファイルが存在するかどうかを 2 回または 1 回確認します。
  3. ファイルが 2 回存在する場合は、1 つを削除します。最新のものである一番下のファイルを削除しない場合。
  4. もう一度ビルドします。
于 2013-05-20T12:12:56.677 に答える
25

可能な解決策に追加するだけです。

私の場合、誤ってヘッダー ファイルで変数を宣言して初期化してしまいました。

たとえば、これは間違っています:

MyFile.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant = 6;

そのはず:

MyFile.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant;

MyFile.m

#import "MyFile.h"

NSInteger const ABCMyConstant = 6;
于 2014-03-19T17:07:00.127 に答える
20

Build Setting に移動し、 No Common Blocksを検索してNOに設定します。もう一度ビルドすると、このエラーは再び発生しません。

于 2016-08-04T08:29:06.293 に答える
11

const別の .m ファイルと同じ名前の .m ファイルを宣言すると、エラーが発生することがわかりましたconst。両方のファイルに #include された同じ親ファイル。

于 2013-05-02T06:11:14.650 に答える
6

リンカ エラーは、ライブラリの使用またはインポートの問題に関する問題を常に示しています。

.h ファイルの代わりに .m ファイルをインポートすると、エラーが発生することがあります。

コードを確認し、ヘッダー ファイル (.h 拡張子) の 1 つで .m インポート ステートメントを探してください。同様の問題が発生し、14 個の重複シンボル エラーが発生しました。

.h の代わりにインポートしたかどうかを確認してくださいViewControler.m。したがって、次のようにする必要があります。

    import "ViewController.h"

そして、あなたAppDelegate.hは次のようになるはずです:

import "UIKit/UIKit.h"
import "ViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) ViewController *mainController;
@end

.m ではなくヘッダー ファイルをインポートすることを常に忘れないでください。

于 2015-03-21T13:02:30.767 に答える
4

別のプロジェクトで機能することがわかっているフレームワークでこの問題が発生しました。他のプロジェクトからファイルをコピーして、このプロジェクトに追加しました。その後、ビルド時に76個の重複エラーが発生しました。

私にとっての簡単な解決策は-ObjC、他のリンカーフラグから削除することでした。以前のプロジェクトにはそれがありませんでした。これを行うと、警告が消え、プロジェクトが正常にビルドされました。

于 2014-03-27T06:49:51.727 に答える
3

別の理由として、ディストリビューション バージョンをビルドするときに、プロジェクトが実際のデバイスではなくシミュレーターを対象としていることが考えられます。また、このエラー メッセージが表示されます。

于 2014-01-15T11:37:56.750 に答える
3

メイン プロジェクトにスタティック ライブラリが含まれていて、そのライブラリへの参照を持つ 2 つ目のライブラリも含まれていると、このエラーが発生しました。これはかなり紛らわしいので、おそらくこれはより明確です。

MyWorkspace + メイン プロジェクト + ライブラリ 1 への参照 + ライブラリ 2 への参照 + ライブラリ 1 + ライブラリ 2 + ライブラリ 1 への参照

メイン プロジェクトからライブラリ 1 への参照を削除すると、エラーはなくなりました。

于 2013-01-23T19:17:09.810 に答える
2

最後に私は解決策を得ました-

  1. 追加したAdMobSDKのすべての参照を削除します(ワークスペースからも削除します)。
  2. プロジェクトをクリーンアップする
  3. このリンクをたどってAdMobを再度追加してください
  4. きれいにして再構築する
于 2012-09-05T12:12:11.133 に答える
2

場合によっては、2 つの異なるファイルで同じ名前の定数 (const) を誤って宣言したために、「アーキテクチャのシンボルが重複しています...」というエラーが発生することもあります。

于 2016-05-15T15:59:44.727 に答える
2

これを解決する最も簡単な方法は、Xcode 7.0 以降の問題です。Common Blocks を NO に変更するだけで問題が解決します。この Project Target > Build Setting > No Common Blocks を試して、NO に変更します。

于 2016-05-02T12:42:50.120 に答える
0

https://stackoverflow.com/a/2755581/190599から取得

あなたができることは、ヘッダーに入れることです(MyConstants.h):

extern const int MyConstant;
extern NSString * const MyStringConstant;

ソース ファイルでは、上記のヘッダーをインクルードしますが、定数 ( MyConstants.m)を定義します。

const int MyConstant = 123;
NSString * const MyStringConstant = @"SomeString";

次に、これらの定数のいずれかを使用する他のソース ファイルにヘッダーを含める必要があります。ヘッダーは、これらの定数がどこかに存在することを宣言しているだけなので、これらの定数名を解決するのはリンカーの仕事であるため、コンパイラは文句を言いません。定数定義を含むソース ファイルがコンパイルされ、リンカはここに定数があることを認識し、他のソース ファイルで見つかったすべての参照を解決します。

ヘッダーで定数を宣言および定義する際の問題 ( として宣言されていないものstatic) は、コンパイラーがそのヘッダーを含む各ファイルの独立したグローバルとしてそれを扱うことです。リンカーがすべてのコンパイル済みソースを一緒にリンクしようとすると、含めた回数だけグローバル名が検出されますMyConstants.h

于 2016-10-05T14:58:40.193 に答える
0

信じられないかもしれませんが、Xcode はプロジェクト ファイルを台無しにします。私たちが見つけた唯一の解決策は、テキスト エディターを使用して問題のあるファイルへのすべての参照を手動で削除し、Xcode でファイルを再度追加することでした。

于 2014-10-07T15:56:33.500 に答える
0

自分へのメモ:「エラーを読んでください!」

私の場合、それはこれを言います:duplicate symbol _OBJC_CLASS_$_SATCoreData in:

翻訳: 呼び出された目的の C クラスSATCoreDataが重複しています。

次に、シンボルの両方のオカレンスへのパスを提供します。パスを読み取ると、.で終わる 2 つのクラス ファイルが示され.oます。両方のクラスを見ると、何か怪しいことがわかります。私の場合、誤って 2 つのクラスに同じ名前を付けてしまいました。何かをテストしていて、怠惰すぎて別のクラスを作成できなかったため、別のクラスのファイル内にあるクラスがありました。これが誰かに役立つことを願っています。

于 2015-10-24T20:05:39.620 に答える
0

OCMock のセットアップ時に同じエラーが発生しました。建物フェーズの「ファイルのコピー」セクションにlibOCMock.aを追加して修正しました

于 2014-03-07T14:20:51.360 に答える
0

私にとっては違いました。クラス実装メソッドをそのままコピーし、iVar もコピーされました。したがって、iVar の世界には 2 つのセットがあり、コンパイラは *.o ファイルをリンクする前に ivar の重複について不平を言い続けました。 .

出力を読むと、重複するivarがすべて削除されました...すべてのプロパティを@synthesizeする必要がない新機能のおかげで...エラーはなくなりました...

于 2012-10-09T16:18:46.247 に答える
0

テストファイルをコピーしてプロジェクトに貼り付けた後、インターフェイスと実装行の名前を変更するのを忘れて、このエラーが発生しました。

@interface TDInputValidationsTests : XCTestCase

@implementation TDInputValidationsTests

ばかげた間違い...プロジェクトの「ビルドフェーズ」タブを見て、重複を確認することもお勧めします。派生データを削除して、クリーン ビルドを作成することも役立つ場合があります。

于 2014-06-05T09:35:43.037 に答える
0

別のプロジェクトからファイルをインポートしましたが、それには main.m ファイルもありました。したがって、全体として2つのmain.mファイルがあり、1つを削除すると問題が解決しました。

于 2014-09-20T13:03:22.920 に答える