web-dev-qa-db-ja.com

重複シンボル_OBJC_METACLASS _ $ _ ClassName

最近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

44
user366584

ファイルMenuScene.mを2回リンクしています。どうやらそれは静的ライブラリとメインアプリケーションにもあります。

53
JeremyP

確認すべきもう1つの簡単なことは、誤って#import a .mファイルの代わりに.hヘッダーファイル。

私に起こりました。

165
derekv

これのもう1つの理由は、私が今やったのと同じことをした人たちのために、管理オブジェクトクラスを再作成したためかもしれません。これを行い、プロジェクト構造内で別のグループを選択すると、誤って同じファイルへの別の参照を作成します。

プロジェクトのルートとモデルグループの両方で、ヘッダーと実装の2つの参照になりました。 .hおよび.mファイルへの最上位の参照を削除すると、リンクの失敗がなくなりました。

37
Egil Rausner

時々、Core DataはAnyProjectNameModel.xcdatamodeldをビルドフェーズのコンパイルソースに挿入します。それを確認して削除すると、すべてが再度実行されます...エラーメッセージは、生成されたManagedObjectsを示しています... AnyProjectNameModel.xcdatamodeldの正しい場所は、ビルドフェーズのコピーバンドルリソースです。 enter image description here

24
BootMaker

ターゲットのコンパイルソースを確認し、class.mファイルが2回含まれているかどうかを確認します

16
Jibeex

私が犯した愚かな間違いは、私の@implementation私のスーパークラスと同じ。

の中に .h

@interface Subclass : Superclass
@end

の中に .m

#import "Subclass.h"

@implementation Superclass
@end

Googleからの定期的な提案はどれも役に立たないようですので、誰かが私と同じくらい気が狂っているか疲れている場合(おそらく両方の健全な組み合わせ)、@implementation

6
RileyE

私の場合、これはXcodeがNSManagedObjectクラスを自動的に生成し、それが手動で作成したNSManagedObjectクラスと衝突したために発生していました。この場合、新しく作成したエンティティのデータモデルインスペクターで「Codegen」を「Manual/None」に設定できます。

4
Tonnie

私にとって、「その他のリンカーフラグ」から-all_loadを削除すると、問題が修正されました。

3
Korbinian Breu

二重リンクを確認する別のこと-左側のファイルリストの2つの異なる場所に同じファイルを配置することが可能です。次に、コンパイラはそれを2回コンパイルしてリンクします。

これは、たとえば、ファイル階層の整理で遊んでいるときに起こります。

ライブラリを作成する必要はなく、プロジェクトツリーの2つの異なる場所に.mをドラッグするだけです。

そのうちの1つへの参照のみを削除することを忘れないでください。ファイルを破棄する必要はありません。

2
Tom Andersen

また、プロジェクトに追加されていないファイルがプロジェクトのどこかで参照されたときに、この特定のエラーが発生しました。私がこれを経験した2つのケースは、それらへの参照を削除せずにプロジェクトからファイルを削除/削除した場合と、チームメイトが参照を追加したが、ファイルを自分のバージョンに追加していないプロジェクトで協力して作業している場合です事業。

OPが問題を解決したことは知っていますが、これは、この質問を読んで助けを求めている他の誰かに役立つかもしれないと感じました。

2
EmphaticArmPump

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時間を費やして、誰かの時間を節約したいと考えています。

1

私は自分で解決策を見つけましたが、少し遅れて投稿して申し訳ありません。すべての支援は大歓迎ですが、新しいCCLayer派生クラスとチェックマークcocos2d 0.99.5静的ライブラリを追加すると問題が発生しますが、これは間違っていました。次に、ターゲットをチェックおよびクリーニングせずにクラスを再広告し、ビルドして実行します。問題は解決しました。

1
user366584

右パネルからターゲットを削除し、ターゲットを再度追加します。これにより、重複する参照が削除されます。 2人のプログラマが同じターゲットを追加し、プロジェクトファイルをコミットすると発生する場合があります。

0
Mayur Kothawade

クラスへの参照を削除中にXCode Betaがクラッシュしました。これにより、回答に記載されている問題が発生し、修正は再び異なりました。

ターゲットのビルドフェーズの[ソースのコンパイル]で、悲しみを与えているアイテムは赤でした。マイナスボタンでは削除できませんでしたが、コンパイラフラグに「skip」と入力すると、プロジェクトのリロード後に赤いクラスが消えました。私はあなたがそこに何かを入力できると仮定しています。

問題の解決策を見つけるのに2時間かかりましたが、この問題を抱えている人たちに別の選択肢を提供するためにここに入れました。

0
Dan Power

私の場合、外部で使用していたのと同じクラス名を含むバイナリライブラリを使用していたため、クラス名を変更しましたが、正常に動作しています:)

0
Abo3atef

回答がどれもうまくいかなかったので、プロジェクトからファイルを削除して、参照の削除のみを選択しました。

その後、同じファイルを追加し直しました。

それは私のエラーを修正しました。プロジェクトはマルチコラボレーションのため、XCodeのどこかに参照が失われた可能性があります。

それが誰かを助けることを願っています。

0
gmogames

このようなエラーの別の可能性は、クラス名の衝突がある場合です。プロジェクト内で同じ名前の2つのクラス、またはいくつかの依存ライブラリで定義されたクラスと衝突するプロジェクトのクラスのいずれか。

0
stoiczek