私はこのエラーに関連するグーグルとstackoverflowに関するいくつかの投稿を見てきました、私はそれらのすべてを読みましたが、それでも問題を取得しています、私は解決策を喜んでいます。コンパイル時に受け取るエラーメッセージは次のとおりです...
「-L/Users/somefolder/Documents/Bharat/MyApp copy/GoogleAdMobAdsSDK」のディレクトリが見つかりませんAlpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o
ありがとう。
最後に解決策を得た-
このエラーが頻繁に発生する別の理由は、誤って.hではなく.mファイルをインポートすることです。
手順:
可能なソリューションに追加するだけです。
私の場合、誤ってヘッダーファイルの変数を宣言して初期化していました。
たとえば、これは間違っています:
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;
ビルド設定に移動してNo Common Blocksを検索し、それを設定します[〜#〜] no [〜#〜]。再度ビルドすると、このエラーは発生しません。
別の.mファイルの別のconst
と同じ名前の.mファイルでconst
を宣言したときに、エラーが発生していることがわかりました。両方のファイルに同じ親ファイルが含まれています。
Core Dataのモデルクラスを再作成した後、これを経験しました。オブジェクトクラスを作成するメニューオプションは、重複したモデルクラスを作成しました。一度デュープを取り除いたら、エラーは消えました...
リンカーエラーは、ライブラリの使用またはインポートの問題に関する問題を常に示しています。
。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ではなくヘッダーファイルをインポートすることを常に忘れないでください
私は別のプロジェクトで働いていると知っていたフレームワークでこの問題を抱えていました。他のプロジェクトからファイルをコピーし、このプロジェクトに追加しました。その後、ビルド時に76個の重複エラーが発生しました。
私にとって簡単な解決策は、-ObjC
他のリンカーフラグから。前のプロジェクトにはそれがありませんでした。これを行うと、警告が消え、プロジェクトが正常にビルドされました。
他の人が他のすべての答えを試してもまだ機能しない場合は、お気に入りのテキストエディターで.xcodeprojファイルを開き、問題を引き起こしているクラスの名前を検索してみてください。これを行う前に、必ずXcodeを閉じてください。ファイルには、.h用に1行、.m用に別の行が必要です。重複がある場合は、それらを削除し、ファイルを保存して、再構築します。
もう1つの理由は、ディストリビューションバージョンをビルドするときに、プロジェクトが実際のデバイスではなくシミュレーターをターゲットにしていることです。また、このエラーメッセージが発生します。
メインプロジェクトに静的ライブラリが含まれていて、そのライブラリへの参照もある2番目のライブラリも含まれていると、このエラーが発生しました。それはかなり混乱しているので、おそらくこれはより明確です。
MyWorkspace +メインプロジェクト+ライブラリ1への参照+ライブラリ2への参照+ライブラリ1 +ライブラリ2 +ライブラリ1への参照
メインプロジェクトからライブラリ1への参照を削除すると、エラーはなくなりました。
また、2つの異なるファイルで同じ名前の定数(const)を誤って宣言したために、「アーキテクチャのシンボルが重複しています...」エラーが発生する場合もあります。
これを解決する最も簡単な方法は、Xcode 7.0以降を発行することです。CommonBlocksをNOに変更するだけで問題は解決します。このProject Target> Build Setting> No Common Blocksを試してください.
同じC関数を2回定義したところにありました。 2つの異なる.m
ファイル。定義の1つを削除するだけです。
テストファイルをプロジェクトにコピーして貼り付けた後、インターフェイスと実装行の名前を変更するのを忘れて、このエラーが発生しました。
@interface TDInputValidationsTests : XCTestCase
そして
@implementation TDInputValidationsTests
愚かな間違い...私はまた、プロジェクトの「ビルドフェーズ」タブを見て重複をチェックすることをお勧めします。派生データを削除してクリーンビルドを作成することも役立ちます。
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
をインクルードした回数だけグローバル名に遭遇します。
OCMockのセットアップ時に同じエラーが発生しました。ビルドフェーズの[ファイルのコピー]セクションにlibOCMock.aを追加して修正しました
別のプロジェクトからファイルをインポートしましたが、main.mファイルもありました。したがって、全体として2つのmain.mファイルがあり、1つを削除すると問題が解決しました。
それは私にとっては異なり、クラス実装メソッドをそのままコピーし、iVarsもコピーされました... iVarsの世界には2つのセットがあり、コンパイラは* .oファイルをリンクする前に重複したivarsについて文句を言い続けました。
出力を読むと、重複するivarがすべて削除されました...すべてのプロパティを@synthesizeする必要のない新機能のおかげで...エラーはなくなりました...
私はその問題を抱えており、しばらく立ち往生していました。問題の原因は、.hファイル(#importと@interfaceの間)にブール値を書き込み、それを.mファイルに使用することでした。
.hファイルからそれらを削除し、それらを.mファイルの同じ場所にコピーするだけで、ビルドは成功します。
信じられないかもしれませんが、Xcodeはプロジェクトファイルを台無しにします。唯一の解決策は、テキストエディターを使用して問題のあるファイルへのすべての参照を手動で削除し、Xcodeでファイルを再度追加することでした。
自己への注意:「エラーを読んでください!」
私の場合、次のように書かれています:duplicate symbol _OBJC_CLASS_$_SATCoreData in:
翻訳:SATCoreData
というObjective Cクラスが複製されています。
次に、シンボルの両方のオカレンスへのパスを提供します。パスの読み取りは、.o
で終わる2つのクラスファイルを指します。両方のクラスを見ると、怪しいものが見つかります。私の場合、誤って2つのクラスに同じ名前を付けていました。何かをテストしていて、別のクラスを作成するのが面倒だったため、別のクラスのファイル内にあるクラス。これが誰かを助けることを願っています。