最近sdkを4.2に、cocos2dを0.99.5にアップグレードしたため、cocos2dアプリケーションを実行しようとしてこのエラーに直面しています。
Target ios Deploymentを変更してもプロジェクトをクリーンアップしようとしましたが、エラーは同じままです。 cocos2dのライブラリクラス名との重複を避けるため、classNameの名前も変更します。
ld:/ Users/umaidsaleem/Desktop/functionalityTest/build/Debug-iphonesimulator/libcocos2d libraries.a(MenuScene.o)および/Users/umaidsaleem/Desktop/functionalityTest/build/functionalityTest.build/Debug-の重複シンボル_OBJC_METACLASS _ $ _ MenuSceneNew iphonesimulator/functionalityTest.build/Objects-normal/i386/MenuScene.o
ファイルMenuScene.mを2回リンクしています。どうやらそれは静的ライブラリとメインアプリケーションにもあります。
確認すべきもう1つの簡単なことは、誤って#import
a .m
ファイルの代わりに.h
ヘッダーファイル。
私に起こりました。
これのもう1つの理由は、私が今やったのと同じことをした人たちのために、管理オブジェクトクラスを再作成したためかもしれません。これを行い、プロジェクト構造内で別のグループを選択すると、誤って同じファイルへの別の参照を作成します。
プロジェクトのルートとモデルグループの両方で、ヘッダーと実装の2つの参照になりました。 .hおよび.mファイルへの最上位の参照を削除すると、リンクの失敗がなくなりました。
ターゲットのコンパイルソースを確認し、class.mファイルが2回含まれているかどうかを確認します
私が犯した愚かな間違いは、私の@implementation
私のスーパークラスと同じ。
の中に .h
@interface Subclass : Superclass
@end
の中に .m
#import "Subclass.h"
@implementation Superclass
@end
Googleからの定期的な提案はどれも役に立たないようですので、誰かが私と同じくらい気が狂っているか疲れている場合(おそらく両方の健全な組み合わせ)、@implementation
!
私の場合、これはXcodeがNSManagedObjectクラスを自動的に生成し、それが手動で作成したNSManagedObjectクラスと衝突したために発生していました。この場合、新しく作成したエンティティのデータモデルインスペクターで「Codegen」を「Manual/None」に設定できます。
私にとって、「その他のリンカーフラグ」から-all_loadを削除すると、問題が修正されました。
二重リンクを確認する別のこと-左側のファイルリストの2つの異なる場所に同じファイルを配置することが可能です。次に、コンパイラはそれを2回コンパイルしてリンクします。
これは、たとえば、ファイル階層の整理で遊んでいるときに起こります。
ライブラリを作成する必要はなく、プロジェクトツリーの2つの異なる場所に.mをドラッグするだけです。
そのうちの1つへの参照のみを削除することを忘れないでください。ファイルを破棄する必要はありません。
また、プロジェクトに追加されていないファイルがプロジェクトのどこかで参照されたときに、この特定のエラーが発生しました。私がこれを経験した2つのケースは、それらへの参照を削除せずにプロジェクトからファイルを削除/削除した場合と、チームメイトが参照を追加したが、ファイルを自分のバージョンに追加していないプロジェクトで協力して作業している場合です事業。
OPが問題を解決したことは知っていますが、これは、この質問を読んで助けを求めている他の誰かに役立つかもしれないと感じました。
2つのターゲットを持つプロジェクトがありました。 Componentという名前のターゲットと、Sampleという名前の2番目のターゲット。サンプルは、コンポーネントをリンクライブラリとして使用していました。その後、コンポーネントはMyPodという名前のポッド(cocoapodと共にインストールされます)を使用していました。
Podfileは次のように書かれています。
def shared_pods
pod 'MyPod'
end
target 'Component' do
shared_pods
end
target 'Sample' do
shared_pods
end
両方のターゲットが共有ポッドリストを参照していました。コンポーネントターゲットをビルドする場合、問題は発生しませんが、サンプルをビルドするときに、重複したシンボル_OBJC_METACLASS _ $ _ ClassNameを取得します。 Podfileを次のように変更しました。
def shared_pods
# empty
end
target 'Component' do
pod 'MyPod'
shared_pods
end
target 'Sample' do
shared_pods
end
そしてそれは問題を解決します。 3時間を費やして、誰かの時間を節約したいと考えています。
私は自分で解決策を見つけましたが、少し遅れて投稿して申し訳ありません。すべての支援は大歓迎ですが、新しいCCLayer派生クラスとチェックマークcocos2d 0.99.5静的ライブラリを追加すると問題が発生しますが、これは間違っていました。次に、ターゲットをチェックおよびクリーニングせずにクラスを再広告し、ビルドして実行します。問題は解決しました。
右パネルからターゲットを削除し、ターゲットを再度追加します。これにより、重複する参照が削除されます。 2人のプログラマが同じターゲットを追加し、プロジェクトファイルをコミットすると発生する場合があります。
クラスへの参照を削除中にXCode Betaがクラッシュしました。これにより、回答に記載されている問題が発生し、修正は再び異なりました。
ターゲットのビルドフェーズの[ソースのコンパイル]で、悲しみを与えているアイテムは赤でした。マイナスボタンでは削除できませんでしたが、コンパイラフラグに「skip」と入力すると、プロジェクトのリロード後に赤いクラスが消えました。私はあなたがそこに何かを入力できると仮定しています。
問題の解決策を見つけるのに2時間かかりましたが、この問題を抱えている人たちに別の選択肢を提供するためにここに入れました。
私の場合、外部で使用していたのと同じクラス名を含むバイナリライブラリを使用していたため、クラス名を変更しましたが、正常に動作しています:)
回答がどれもうまくいかなかったので、プロジェクトからファイルを削除して、参照の削除のみを選択しました。
その後、同じファイルを追加し直しました。
それは私のエラーを修正しました。プロジェクトはマルチコラボレーションのため、XCodeのどこかに参照が失われた可能性があります。
それが誰かを助けることを願っています。
このようなエラーの別の可能性は、クラス名の衝突がある場合です。プロジェクト内で同じ名前の2つのクラス、またはいくつかの依存ライブラリで定義されたクラスと衝突するプロジェクトのクラスのいずれか。