web-dev-qa-db-ja.com

アーキテクチャi386 clangのシンボルを複製

私はこのエラーに関連するグーグルとstackoverflowに関するいくつかの投稿を見てきました、私はそれらのすべてを読みましたが、それでも問題を取得しています、私は解決策を喜んでいます。コンパイル時に受け取るエラーメッセージは次のとおりです...

「-L/Users/somefolder/Documents/Bharat/MyApp copy/GoogleAdMobAdsSDK」のディレクトリが見つかりませんAlpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o

ありがとう。

56
Bharat

最後に解決策を得た-

  1. 追加したAdMob SDKのすべての参照を削除します(ワークスペースからも削除します)。
  2. プロジェクトをきれいにする
  3. このリンクに従ってAdMobを再度追加してください
  4. きれいにして再構築
2
Bharat

このエラーが頻繁に発生する別の理由は、誤って.hではなく.mファイルをインポートすることです。

234
Rik Smith-Unna

手順:

  1. ターゲット設定のビルドフェーズを確認します。
  2. ファイルが2回または1回存在するかどうかを確認します。
  3. ファイルが2回存在する場合は、1つを削除します。そうでない場合は、最新のファイルを下部から削除します。
  4. もう一度ビルドします。
57
Desparado_

可能なソリューションに追加するだけです。

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

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

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;
25
KyleT

ビルド設定に移動してNo Common Blocksを検索し、それを設定します[〜#〜] no [〜#〜]。再度ビルドすると、このエラーは発生しません。

20

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

11
reza23

Core Dataのモデルクラスを再作成した後、これを経験しました。オブジェクトクラスを作成するメニューオプションは、重複したモデルクラスを作成しました。一度デュープを取り除いたら、エラーは消えました...

8
jimmyb

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

。hファイルではなく.mファイルをインポートしたときにエラーが発生することがあります。

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

インポートしたかどうかを確認しますViewControler.mその.hの代わりに、このようにする必要があります:

    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ではなくヘッダーファイルをインポートすることを常に忘れないでください

7
Iman

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

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

4
Storm Factory

他の人が他のすべての答えを試してもまだ機能しない場合は、お気に入りのテキストエディターで.xcodeprojファイルを開き、問題を引き起こしているクラスの名前を検索してみてください。これを行う前に、必ずXcodeを閉じてください。ファイルには、.h用に1行、.m用に別の行が必要です。重複がある場合は、それらを削除し、ファイルを保存して、再構築します。

4
Jeff Grimes

もう1つの理由は、ディストリビューションバージョンをビルドするときに、プロジェクトが実際のデバイスではなくシミュレーターをターゲットにしていることです。また、このエラーメッセージが発生します。

3
user3095716

メインプロジェクトに静的ライブラリが含まれていて、そのライブラリへの参照もある2番目のライブラリも含まれていると、このエラーが発生しました。それはかなり混乱しているので、おそらくこれはより明確です。

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

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

3
Matt Becker

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

2
Aron

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

2

同じC関数を2回定義したところにありました。 2つの異なる.mファイル。定義の1つを削除するだけです。

1
Rob Sanders

私はプロジェクトをきれいにしてみました、すべての派生データを消去しました。何も機能しませんでした。アトラス、これは私のために働いた。

enter image description here

もう1つの理由は、ディストリビューションバージョンをビルドするときに、プロジェクトが実際のデバイスではなくシミュレーターをターゲットにしていることです。また、このエラーメッセージが発生します。

1
A.G

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

@interface TDInputValidationsTests : XCTestCase

そして

@implementation TDInputValidationsTests

愚かな間違い...私はまた、プロジェクトの「ビルドフェーズ」タブを見て重複をチェックすることをお勧めします。派生データを削除してクリーンビルドを作成することも役立ちます。

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をインクルードした回数だけグローバル名に遭遇します。

0
CodeReaper

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

0
Eric

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

0
Sikander

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

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

0
Sanjeev

私はその問題を抱えており、しばらく立ち往生していました。問題の原因は、.hファイル(#importと@interfaceの間)にブール値を書き込み、それを.mファイルに使用することでした。

.hファイルからそれらを削除し、それらを.mファイルの同じ場所にコピーするだけで、ビルドは成功します。

0
Red.A

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

0
SomaMan

自己への注意:「エラーを読んでください!」

私の場合、次のように書かれています:duplicate symbol _OBJC_CLASS_$_SATCoreData in:

翻訳:SATCoreDataというObjective Cクラスが複製されています。

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

0
smileBot