我在MacTypes.h的两行中遇到了typedef重定义错误,在以下代码块中:
#if __LP64__
typedef unsigned int UInt32;
typedef signed int SInt32;
#else
typedef unsigned long UInt32; // error here
typedef signed long SInt32; // error here
#endif
Clang错误指向CFBase.h中的以前的定义(在CoreFoundation.framework中):
#if !defined(__MACTYPES__)
#if !defined(_OS_OSTYPES_H)
typedef unsigned char Boolean;
typedef unsigned char UInt8;
typedef signed char SInt8;
typedef unsigned short UInt16;
typedef signed short SInt16;
typedef unsigned int UInt32; // previous definition is here
typedef signed int SInt32; // previous definition is here
typedef uint64_t UInt64;
typedef int64_t SInt64;
typedef SInt32 OSStatus;
#endif
...
这很奇怪,因为__LP64__
在Mac平台上显然总是如此,那么为什么还要评估typedef?为什么有一个编译路径,其中两个操作系统提供的定义相互矛盾?
编辑:以下是Xcode中错误的屏幕截图。
我已经删除了包含<Carbon/Carbon.h>
的文件的路径,因为它包含我的客户端的名称(两个错误的文件相同)。下面的完整路径名如下(全部包含在Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks中):
更新
在我自己的代码中,就在#include <Carbon/Carbon.h>
之前,我添加了以下内容:
#if __LP64__
#error Has LP64
#else
#error Doesn't have LP64
#endif
...我得到'没有LP64'错误,所以这似乎是问题的根源。但是,当我在Sublime Text 2(使用SublimeClang)编译以下内容时......
int main()
{
#if __LP64__
#error Has LP64
#else
#error Doesn't have LP64
#endif
return 0;
}
...我得到“有LP64”。对#define __LP64__
项目进行项目文本搜索我在项目中找不到任何内容,而在搜索__LP64__
时,只需加载#if
s和#ifdef
秒。有谁知道这个错误可能来自哪里?
答案 0 :(得分:2)
最后结果发现这个问题是由于Xcode的多次安装:我最近安装了Xcode 4.4(来自App Store),我仍然在某处安装了Xcode 3。我通过运行删除了Xcode 3的uninstall-devtools
以及Library和Developer文件夹中的所有各种路径来解决了这个问题。我不确定为什么冲突的Xcode安装会导致这样的问题,但删除Xcode 3解决了它。我希望这可以帮助任何有这样问题的人 - 这肯定不是我预期的问题。