2012-04-03 18 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

相关问题