2012-04-03 15 views
3

我可以在Xcode(4.2)中構建我的項目以進行調試而沒有問題,但是當我想構建它以用於發佈時(構建用於存檔),我得到錯誤:「Typedef redefinition與不同類型(無符號整數與無符號長整數)「。當試圖構建XCode項目發佈時Typedef重定義錯誤

問題的代碼是:

#ifdef _LZMA_UINT32_IS_ULONG 
typedef long Int32; 
typedef unsigned long UInt32; 
#else 
typedef int Int32; 
typedef unsigned int UInt32; <--error on this line 
#endif 

你可以看到整個文件: http://read.pudn.com/downloads166/sourcecode/zip/758136/C/Types.h__.htm

以前的定義是從MacTypes.h框架CoreServices。

我對調試和發佈具有相同的預處理器宏,並且我使用Apple的LLVM編譯器3.0。當我嘗試構建用於分析的項目時,會發生同樣的錯誤。

任何想法爲什麼會發生這種情況?

+0

我知道你認爲你在任何地方都有相同的預處理宏,但是你能否將#error失敗置於ifdef _LZMA_UINT32_IS_ULONG塊中並確保代碼永遠不會被編譯?我覺得如果你確認你可以開始跟蹤原因,那麼通過ifdef進行調試和發佈會有不同的路徑。 – 2012-04-03 14:56:41

+0

你是否正在編譯針對相同的目標在調試vs發佈(即其中一個編譯爲64位,另一個編譯爲32位或兩者? – DRVic 2012-04-03 14:58:15

+0

@DRVic你是對的,我在編譯時只是爲64位調試,對於發行版,我使用了32位/ 64位,當我選擇64位版本時,它的版本很好,我怎樣才能編譯爲32位/ 64位? – 2012-04-03 15:22:00

回答

7

在你得到的錯誤(編譯32位時),你已經擁有的

typedef unsigned int UInt32; <--error on this line 

等效(因此錯誤),這樣你可以刪除違規線的情況下。

顯然,並非所有的源包括/進口MacTypes.h,所以兩者兼得,圍繞違規符合的#ifdefs像這樣:

#ifndef __MACTYPES__ 
typedef unsigned int UInt32; 
#endif 

可惜,這是不完美的;你需要確定如果包含MacTypes.h,它會在這之前發生。一種確保在本地#imports之前執行#import系統的方法。

+0

是的,這是我第一次想到,但如果我刪除我得到編譯器錯誤:「未知的類型名稱UInt32」在代碼的其他部分 – 2012-04-03 15:55:09

+0

因此,我修改了我的答案相應,不完全漂亮,但在那裏, – DRVic 2012-04-03 19:02:10

+0

這很好。謝謝! – 2012-04-03 20:47:54

相關問題