Xcode 4.6にiOSアプリがあり、最近iPhone 6.1シミュレーターでビルドして実行しようとすると、「Mach-Oリンカーエラー」が発生しました。それは言い続けました:
ld:アーキテクチャi386の17個の重複シンボルclang:エラー:リンカコマンドが終了コード1で失敗しました(呼び出しを確認するには-vを使用してください)
誰もこれを解決する方法を知っていますか?
本当にありがとう!
[ビルドフェーズ]-> [ソースのコンパイル]に移動して、クラスの重複を探します。
「」があるかどうかを確認してください* .m"#import
!それは私の間違いだったようです...
私の例では、私は宣言しました
extern NSString const *keyString
2つの異なるファイルで。そのうちの1つを名前を変更すると、問題が解決しました。
私の場合、それは定数でした。
NSString *const cellID = @"cellID";
この行は2つの.mファイルで記述されました。最初にstatic
キーワードを追加すると、問題は解決しました。
この問題は、新しいプロジェクトでも再現できます。さまざまな.mファイルで定数を定義しても、それらはプライベートであるため効果がないと思われます。しかし、コンパイラが舞台裏でどのように処理しているのかわかりません。さらに、課題ナビゲーターから課題をタップしても、他の課題のようにエディターでページを開くことはありません。本当にイライラします。
ソリューションを提供できるかどうかはわかりませんが、xCode 4.6でも同じことが起こったので、回答を共有します。 Cクラスヘッダーと実装ファイルを追加し、mainに含めました。その後、新しいCクラスヘッダーと実装を削除することにしました。同じ名前と関数呼び出しを使用して新しいcクラス/ヘッダーを再度追加すると、エラーが発生しました。
率直に言って、これはバグかもしれません。私が修正した唯一の最速の方法は、新しいプロジェクトを開始し、すべてのクラスを取り込むことでした。
クラスfuncをリファクタリングすると、このエラーが発生することもあります。 [製品]-> [クリーンして再構築]に進みます。
異なるクラスの両方で値を変更する場合。静的キーワードでマークすることを忘れないでください。
または、clangは値を解釈せずに以下のようなエラーをスローします。
Apple Mach-Oリンカーエラーclang:エラー:リンカーコマンドは終了コード1で失敗しました
複数のクラスに同じ名前の非インスタンスメソッドがないことを確認してください(たとえば、非常に似ている2つのViewControllerがあり、すばやく移動するには、1つのViewControllerから2番目のViewControllerにコードをコピーして貼り付けますNSMutableString * filteredStringFromStringWithFilter(NSString * string、NSString * filter))のようなメソッドが呼び出されると、アプリはどちらのメソッドも使用できるので、どちらのメソッドを使用するか混乱しますそのクラスのメソッドと混乱を削除しました。物事をもっと明確にしたくないのではないでしょうか!