1

iOS アプリの開発中に、同じ問題が発生し続けます - いくつかの git pull / 変更のマージの後、取得します

duplicate symbol _OBJC_CLASS_

リンカ エラー

さまざまなクラスのために。ソース ファイルを削除すると、このエラーを取り除くことができます (重複シンボル _OBJC_METACLASS_$_User の場合は User.m とします)。

完全なエラーは次のようになります。

duplicate symbol _OBJC_CLASS_$_GridView in:
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Intermediates/App.build/Debug-iphoneos/App.build/Objects-normal/armv7/GridView-9FDDD336172B4A48.o
duplicate symbol _OBJC_METACLASS_$_GridView in:
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Intermediates/App.build/Debug-iphoneos/App.build/Objects-normal/armv7/GridView-9FDDD336172B4A48.o
duplicate symbol _OBJC_METACLASS_$_User in:
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Intermediates/App.build/Debug-iphoneos/App.build/Objects-normal/armv7/User.o
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Products/Debug-iphoneos/libRestKit.a(User.o)
duplicate symbol _OBJC_CLASS_$_User in:
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Intermediates/App.build/Debug-iphoneos/App.build/Objects-normal/armv7/User.o
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Products/Debug-iphoneos/libRestKit.a(User.o)
ld: 4 duplicate symbols for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
4

1 に答える 1

2

以下のことを試してみてください。

  1. プロジェクトをチェックして、同じファイルが 2 つの異なる場所からインポートされているかどうかを確認してください。あなたのプロジェクトを見て | ターゲット | ビルド フェーズ (タブ) | ソースセクションを再度コンパイルし、ファイル (GridView.m と User.m) が 2 回表示されないようにします。そのリストは、ファイル名ではなく追加された日付でファイルを並べ替えているため、見落としている可能性があります。

  2. また、外部ライブラリ libRestKit.a で静的にリンクしているようです。あなたまたはあなたのチームの他の誰かが RESTKit のソースと静的ライブラリをインポートしていますか? 両方ある場合は、シンボルが重複します。

  3. 最後に、コードのどこかに #import "User.m" や #import "GridView.m" などの .m ファイルを誰もインポートしていないことを確認してください。問題のあるソース ファイルを削除します。

全員が同じビルド構成になるまで、これらの問題が発生し続けるため、全員がコミットしてすべてのコードをチェックインする必要があります。マージの競合を修正し、ローカル リポジトリをシステム上の本来の状態にしてからプッシュします。次に、チームの残りのメンバーにリポジトリを削除して、新しいクローンを作成してもらいます。うまくいけば、全員が同じコード ベース/プロジェクトから開始することで、問題の再発を防ぎ、問題が発生した場所を特定できるので、将来的に問題を回避できます。

よろしくお願いします。

于 2013-02-23T23:57:09.480 に答える