2011-03-17 87 views
42

我想運行我的cocos2d應用程序並面臨此錯誤,因爲我最近已將sdk升級到4.2,並將我的cocos2d升級到了0.99.5。

我試圖清理我的項目,甚至更改目標ios部署,但錯誤保持不變。還要重命名className以避免與cocos2d的庫類名稱重複。

LD:重複的符號_OBJC_METACLASS _ $ _ MenuSceneNew在 /用戶/ umaidsaleem /桌面/ functionalityTest /編譯/調試-iphonesimulator/libcocos2d libraries.a(MenuScene.o)和 /用戶/ umaidsaleem /桌面/ functionalityTest /build/functionalityTest.build/Debug-iphonesimulator/functionalityTest.build/Objects-normal/i386/MenuScene.o

回答

50

您在文件MenuScene.m鏈接兩次。你顯然有它在一個靜態庫,也在你的主應用程序。

+1

我甚至改名爲MenuSceneNew,整個類名已改爲MenuSceneNew.h,MenuSceneNew.m,但錯誤仍然相同。 – user366584 2011-03-18 07:07:03

+0

@ user366584:重命名類或文件並不重要,事實是,它被鏈接兩次。 – JeremyP 2011-03-18 10:16:07

+0

我有這個問題。那麼如果你的靜態庫依賴於那個文件,你也該怎麼做呢?這個文件也在你的主應用程序鏈接的另一個靜態庫中? – 2015-07-16 17:17:11

1

我已經想出了自己的解決方案,抱歉發佈很少延遲。所有的幫助都非常感謝,但問題出現時,我添加新的CCLayer派生類和複選標記cocos2d 0.99.5靜態庫是錯誤的。然後,我不再檢查並清理我的目標,然後重建我的課程,然後建立並開始。現在問題解決了。

2

我也有這個特殊的錯誤發生時,沒有被添加到項目中的文件被引用在項目中的某個地方。我經歷過的兩種情況是,我刪除/刪除了項目中的文件,而沒有刪除對它們的引用,並且當在隊友添加引用的項目上協作工作時,我沒有將文件添加到我的版本項目。

我知道OP已經解決了他們的問題,但我覺得這可能會幫助其他人在閱讀此問題的同時尋找幫助。

164

另一個相當簡單的事情是檢查是你沒有意外地#import a .m文件而不是.h頭文件。

發生在我身上。

+3

啊哈!這正是我剛纔的情況。感謝您的評論。我知道我正在跟蹤一個愚蠢的錯誤,但不知道哪一個,果然......。 – 2011-09-19 19:50:27

+0

哈哈!它也幫助了我! – 2012-02-15 07:49:54

+1

我也是。非常感謝! – Christine 2012-07-20 18:08:04

37

對此的另一個原因是,對於那些與我剛做的相同的人,可能是您重新創建了託管對象類。通過這樣做並在項目結構中選擇另一個組,您意外地創建了對相同文件的另一個引用。

我最終在項目的根目錄和我的模型組中使用了兩個頭文件和實現的引用。刪除頂部的.h和.m文件引用消除了鏈接失敗。

+0

謝謝!我沒有注意到這一點。多麼可怕的時間浪費。再次感謝提示。 – technophobia 2013-05-29 15:54:26

+0

謝謝!這是我的問題。果然,我在相同的模型文件夾中實際上有header&impl 2x!我之前就已經發生過這種情況,但是讀這讓我更加近距離。 ** facepalm ** – dooleyo 2013-07-25 15:24:59

+0

剛碰到這個問題,問題是我創建了一個名爲'x'的組中的實體,然後在'y'組中重新創建...由於某種原因,愚蠢的pbxprojec文件保留了對所有內容的引用,我的構建失敗了。 – rodrigoelp 2014-08-04 05:42:53

0

XCode Beta在我刪除對類的引用時崩潰了。這導致了答案中描述的問題,修復程序再次不同。

在我的目標構建階段,在「編譯源碼」下,讓我悲傷的項目是紅色的。我無法使用減號按鈕將其刪除,但在編譯器標誌中鍵入「skip」會導致重新加載項目後紅色類消失。我假設你可以在那裏輸入任何東西。

花了我兩個小時才找到解決問題的辦法,我把它放在這裏,爲有這個問題的人提供了另一個選擇,雖然它可能不會是一個普通的問題。

2

檢查雙鏈接的另一件事 - 它可能在左側文件列表中的兩個不同位置具有相同的文件。然後編譯器編譯並鏈接兩次。

例如,在組織文件層次結構時發生這種情況。

您不必製作圖書館或任何東西 - 只需將.m拖入項目樹中的兩個不同位置即可。

請記住,只刪除對其中一個引用,不需要文件垃圾。

0

沒有一個答案爲我工作,所以我做的是從項目中刪除文件,並選擇僅刪除引用。

然後我回來了相同的文件,它的工作。

這解決了我的錯誤。由於項目是多協作的,因此XCode可能會丟失引用。

希望能幫助別人。

+0

這也適用於我。在提交過程中,我查看了.pbxproj文件中的更改,發現在損壞的版本中,在PBXSourcesBuildPhase部分的文件數組中,問題文件被列出了兩次。這是在文件被重命名,提交,推送,然後被同事拉出之後發生的。這顯然是Xcode/git中的一個錯誤。我會重命名或添加一堆文件;只有這個因爲某種原因被搞砸了。 – 2015-06-01 22:35:16

14

檢查看看你的目標的編譯源代碼,並且如果class.m文件被包含兩次

+0

簡單而高效! – FredericK 2014-04-24 21:40:13

+0

謝謝。這解決了我的問題。 – 2016-12-27 17:56:27

+0

謝謝工作! – 2017-01-23 08:34:38

0

另一種可能的錯誤,如這是當有一類名稱衝突。您的項目中有兩個名稱相同的類,或者您的項目中的類與某些依賴庫中定義的類衝突。

0

從右側面板移除目標並再次添加目標。這將刪除任何重複的引用。 如果2程序員添加相同的目標並提交項目文件,可能會發生這種情況。

5

我犯的一個愚蠢的錯誤是我把我的@implementation命名爲我的超類。

.h

@interface Subclass : Superclass 
@end 

在從谷歌的常規建議的.m

#import "Subclass.h" 

@implementation Superclass 
@end 

似乎沒有幫助,因此,如果像我的人是瘋了還是累了(可能是健康的兩者混合),請確保您沒有複製@implementation

+0

有時需要進行非常廣泛的搜索才能找出你所犯的愚蠢的小錯誤。萬分感謝。 – JMarsh 2015-01-28 16:40:54

+0

謝謝你先生! :D – Trip 2017-02-09 17:38:59

2

對我來說,從'其他鏈接器標誌'中刪除-all_load解決了這個問題。

0

在我來說,我使用的是二進制庫包括我用外相同的類名, 所以我改變了我的類名和它的正常工作:)

0

我有2個目標的項目。一個名爲Component的目標,另一個名爲Sample。示例是使用組件作爲鏈接庫。 然後Component使用名爲MyPod的pod(與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個小時,希望能省點時間。

20

有時Core Data會將AnyProjectNameModel.xcdatamodeld插入到構建階段的編譯源中。檢查並刪除它,一切都再次運行... 錯誤消息僅表示生成的ManagedObjects ... AnyProjectNameModel.xcdatamodeld的正確位置是Build Phases中的Copy Bundle資源。 enter image description here

+0

這令人難以置信的令人沮喪。謝謝。 – 2016-12-20 16:23:57

+0

謝謝。謝謝。 – lucygenik 2017-02-13 22:04:49

+0

這個解決了我的問題。謝謝 – hamid 2017-03-31 05:18:16

1

在我的情況下,這是因爲Xcode自動生成我的NSManagedObject類,然後與我手動創建的NSManagedObject類發生衝突。在這種情況下,您可以在數據模型檢查器中爲新創建的實體設置「Codegen」爲「Manual/None」。