Xcodeプロジェクトを実行しようとすると、シンボルが重複しているというエラーで失敗します。私はオンラインでこれらの重複を見つけましたが、運がありませんでした:
これを修正する方法はありますか?
Xcodeプロジェクトを実行しようとすると、シンボルが重複しているというエラーで失敗します。私はオンラインでこれらの重複を見つけましたが、運がありませんでした:
これを修正する方法はありますか?
回答:
私にとっては、「Common Blocksなし」コンパイラー設定をNOに切り替えるのに役立ちました:かなり意味があるようですが、設定はここで説明されています: GCC_NO_COMMON_BLOCKSの用途は何ですか?
Xcode 8を使用して、「プロジェクトを推奨設定に更新する」オプションがプロジェクトの「共通ブロックなし」をオンにしました。
オフに戻すと、すべてが修正されました。
私にとっては、誤って.hではなく.mとしてファイルをインポートしたことでした
ポッドのダウングレード中にポッドをめちゃくちゃにし、ポッドを削除して再度インストールすることで、アーキテクチャarm64の重複シンボルの問題を解決しました:
pod deintegrate
pod install
別の解決策は次のとおりです。
選択プロジェクト - > [ 対象 ] - > [ ビルドフェーズ - > コンパイルソース - >(あなたのケースでは第三の最後のエラー行に記載されているファイルの検索BFAppLinkReturnToRefererView.o)。
次に、検索結果に1つまたは2つのファイルが表示されます。
それらの1つを削除して、再度コンパイルします。残っているファイルが1つだけで、ビルドの競合がなくなったため、今すぐ再コンパイルする必要があります。
それが機能しない場合は、ファイルにエラーが含まれている可能性があるため、それらをすべて削除してから再コンパイルする必要があります。再び動作するはずです。
Xcode 8にアップグレードすると、推奨設定にアップグレードするようメッセージが表示されました。同意してすべて更新しました。コンパイル時の問題が発生し始めました:
XXXXの重複シンボルXXXXの重複シンボルXXXXの重複シンボル
合計143エラー。ターゲットに移動->ビルド設定->共通ブロックなし-> NOに設定。これで問題は解決しました。問題は、統合プロジェクトに共通のコードブロックがあり、それをコンパイルできないことでした。説明はここにあります。
このエラーは、リンカーがobjファイルをリンクしようとしたときに発生します。このエラーについて私が考えることができるいくつかの理由は次のとおりです。
複製された関数/クラスは、プロジェクト内の2つの異なる場所/ファイルで定義されており、ビルドコマンドのバリエーションに応じてコンパイルできるのはそのうちの1つだけでした。しかし、どういうわけか、これらのファイルは両方ともプロジェクトでコンパイルされています。したがって、コンパイルする必要のあるファイルのリストにsrcファイルを追加するif-else条件またはその他の依存関係を確認し、特定のビルドコマンドで不要なファイルを削除する必要があります。
複製された関数/クラスが、プロジェクトの2つの異なる場所/ファイルで誤って定義されています。間違った定義を削除してください。
再度ビルドする前にOBJディレクトリをクリーンアップしてください。以前のビルドからの古いobjファイルがいくつかあり、これがこの競合の原因となっている可能性があります。
PS私はエキスパートではありませんが、これは私が直面したときにこの問題を解決する方法です。:)
Xcode 7または8に移行し、本当に古いプロジェクトを開いている場合、私はこの問題に遭遇しました:
に SomeConstFile.h
NSString * const kAConstant;
に SomeConstFile.m
NSString *const kAConstant = @"a constant";
以前のバージョンのコンパイラは、ヘッダーファイルの定義はexternであると想定していたため、SomeConstFile.hをどこにでも含めても問題ありませんでした。
次に、これらの定数をexternとして明示的に宣言する必要があります。
に SomeConstFile.h
extern NSString * const kAConstant;
私の場合、理由はあまりにも愚かでした:
マクロが定義されているConstant.hファイルがありました。そこでNSStringをやろうと思った。そしてこれをしました:
NSString const *kGreenColor = @"#00C34E";
これが原因で、アーキテクチャーarm64の重複シンボルの問題が発生し、リンカーコードが終了コード1で失敗しました。constNSString 行を削除するとうまくいきました。
インクルードファイルを確認してください。誤って "filename.h"ではなく#filename.mをインポートしたため、この問題が発生しました。オートコレクト(タブ)では、 "h"ではなく "m"を使用しています。
この問題を解決するには、ビルドフェーズに移動し、(facebookSDK、unityads)のような重複ファイルを検索して削除(拡張子file.o)してから、もう一度ビルドします。
私にとっては、sampleMethod
ViewController_Aで呼び出されるメソッドを作成し、ViewController_Bでも同じメソッドを作成しました。このエラーが発生したため、ViewController_Bのメソッド名をに変更しましたsecondSampleMethod
。エラーを修正しました。
コードを減らし、多くの場所で同じコードを複製しないようにするための良い機能のようです。
No Commonブロックを「はい」から「いいえ」に変更してから、テスト可能性を「はい」から「いいえ」に変更しようとしましたが、うまくいきませんでした。ビルドフェーズでも重複ファイルを確認しましたが、重複ファイルはありません。
この問題は、メソッドの外側で.mの変数を遅延定義していたため、別の.mファイルで、メソッドの外側で同じ名前の別の変数を定義していたために発生しました。これにより、グローバル変数名の重複の問題が発生していました。
Plz設定を変更します。
ステップ1:TARGETS-> Build Settings-> No Common Blocks-> Noに移動します
ステップ2:TARGETS-> Build Settings-> enable testability-> Noに移動します