4

我可以在 Xcode(4.2) 中构建我的项目以进行毫无问题的调试,但是当我想构建它以进行发布(构建用于归档)时,我收到错误:“Typedef 重新定义不同类型(无符号 int 与无符号长)”。

有问题的代码是:

#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

先前的定义位于 CoreServices 框架的 MacTypes.h 中。

我对调试和发布有相同的预处理器宏,并且我使用的是 Apple 的 LLVM 编译器 3.0。当我尝试构建项目进行分析时,也会发生同样的错误。

知道为什么会这样吗?

4

1 回答 1

8

如果您遇到错误(编译 32 位时),您已经拥有相当于

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

(因此错误)所以你可以删除有问题的行。

显然,并非所有源代码都包含/导入 MacTypes.h,因此要同时使用它,请使用 #ifdefs 将违规行括起来,如下所示:

#ifndef __MACTYPES__
typedef unsigned int UInt32;
#endif

不幸的是,这并不完美。您需要确保如果包含 MacTypes.h,它会在此之前发生。确保这一点的一种方法是在本地#imports 之前执行系统#imports。

于 2012-04-03T15:42:43.157 回答