2010-08-01 84 views
51

我有重複的符號_main。Xcode,重複的符號_main

問題在於「重複的符號_main在/Users/.../i386/main-B9843B6026D6EFA4.o和/Users/.../i386/main-B9843B6026D6EFA4.o」中,XXX和XXX分別是實際上是相同的.o文件。我不知道爲什麼它認爲它是重複的符號,當它是相同的。

任何幫助表示感謝,謝謝。

+0

如果main()函數有多處出現,就會發生這種情況。 – ilgaar 2017-12-23 20:11:22

回答

85

啊..我知道這是我在目標/編譯源(在更新的XCode下它是在構建階段/編譯源下)有多個條目。我刪除了它們,問題就解決了。多入口的事情可能與Git合併有關。

+1

我還沒有想出...任何其他想法的人? – logixologist 2011-10-07 03:15:32

+0

你真的救了我很多努力 – 2012-01-25 11:13:43

+0

我有一個從TBXML(我剛剛添加)複製主 – Jacksonkr 2012-01-26 18:19:21

3

我用Xcode 4.1打開一個用Xcode 4.0.2創建的項目時遇到了同樣的問題。我只需點擊「現代化項目」(編輯/現代化項目)即可解決問題。此過程自動刪除所有重複項。

+0

這實際上對我有效。謝謝! – Imran 2012-10-05 03:43:56

2

如果仍然有問題,試圖尋找這樣的:「INT主(」,並刪除除的main.m這些文件

2

剛剛得到這個問題我自己,但閱讀huggie的解決方案之後,並在引導我在正確的軌道,剩下我有點糊塗了 所以,目前的解決方案在Xcode: 選擇項目,目標 - >建設階段,並單擊驗證設置

然後Xcode中會自動修復自己的錯誤總是很高興當。工具試圖阻止你的進步;)

+1

那應該是哪裏? – Kaptain 2015-04-22 13:43:44

+0

這真棒,以前從未見過。只需進入項目構建階段,您可以在編輯器菜單中找到「驗證設置」。爲我工作! – 2015-10-20 07:36:26

15

我也有這個問題這是由我從另一個項目導入的代碼引起的。 我做了grep命令 「INT主」 在我的項目目錄:

grep -nr "int main" . 

,發現

./main.m:13:int main(int argc, char *argv[]) 
./IMPORTED_DIR/main.m:13:int main(int argc, char *argv[]) 

的IMPORTED_DIR包含這是造成錯誤,我

額外的main.m我從項目 - >目標 - >構建階段 - >編譯源列表中刪除該文件,然後編譯

+0

我通過int main進行搜索,我有兩個相同的文件,我刪除了一個和項目運行。謝謝;) – 2014-12-03 16:53:37

+0

我運行了'grep -nr「int main」。「,並在我的項目中找到了一個樣例項目,它是我添加的SDK下載的一部分。找到這個之後,我通過Xcode刪除了這些文件,然後瞧!該項目現在建成。謝謝。 – 2015-01-14 17:40:50

23

看來,在我的情況下,我導入了一個.m fi而不是其對應的.h。 解決通過編輯

#import "Tools.m" 

#import "Tools.h" 
+0

非常感謝!在我嘗試了所有其他解決方案之後,在我的項目中簡單搜索.m「顯示導入了一個.m文件。 – 2012-10-23 11:27:15

+1

在改變繼承層次結構後,我遇到了同樣的問題。謝謝。 – orkoden 2013-06-26 17:21:46

+0

剛剛得到了這個。謝謝! – jsd 2013-11-21 22:55:21

2

在我的情況,我在我的常量文件中聲明一個NSString(由許多類進口),但忘了把它定義爲靜態!

例如NSString* PARAMS = @"paramA"; 應該是:static NSString* PARAMS = @"paramA";

閱讀完整的錯誤消息讓我能夠弄清楚這一點:「重複的符號PARAMS」。不要害怕,並嘗試瞭解錯誤信息!有時他們甚至可能會告訴你到底你做錯了什麼。

0

你也可以得到這個方法名!

我通過CocoaPods添加DBCamera後得到了duplicate symbol _runOnMainQueueWithoutDeadlocking,這是因爲我的NSObject類(NSObject + Tools.h)和GPUImage依賴文件GPUImageOutput.m都有一個名爲'runOnMainQueueWithoutDeadlocking'的方法。

我很幸運能夠從代碼中刪除我的方法,因爲我沒有實際使用它或任何地方。

這可能是我應該把類放在NSObject上。

0

就我而言,我導入了另一個項目,以便利用其中包含的庫。它導致我的項目有兩個main.m文件。

這更令人困惑,因爲錯誤在稍後的幾次構建中才顯示出來。

6

我在使用兩個第三方框架時遇到同樣的問題。 (AppLovin和Flurry) 我知道通過在構建設置中從「Other Linker Flags」中刪除「all_load」。