【问题标题】:Typedef redefinition of UInt32 in MacTypes.h, from definition in CFBase.hMacTypes.h 中 UInt32 的 Typedef 重新定义,来自 CFBase.h 中的定义
【发布时间】:2012-10-03 10:09:28
【问题描述】:

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 呢?为什么会有两条 OS 提供的定义相互矛盾的编译路径?

编辑:这是 Xcode 中错误的屏幕截图。

我已经删除了包含<Carbon/Carbon.h> 的文件的路径,因为它包含我的客户的名称(两个错误的文件相同)。下面的完整路径名如下(全部包含在 Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks 中):

  • Carbon.framework/Headers/Carbon.h:20
  • CoreServices.framework/Headers/CoreServices.h:18
  • CoreServices.framework/Frameworks/AE.framework/Headers/AE.h:20
  • CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h:27
  • CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacTypes.h:27

更新:

在我自己的代码中,就在#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__ 时,它只会出现#ifs 和#ifdefs 的负载。有谁知道这个错误可能来自哪里?

【问题讨论】:

  • 你在 Sublime Text 中使用什么编译器?哪些选项被传递给编译器?您在 Xcode 项目中使用什么编译器?哪些选项被传递给编译器?您是否还在为 32 位编译?

标签: c++ xcode macos typedef macos-carbon


【解决方案1】:

最后发现这个问题是由于多次安装 Xcode:我最近安装了 Xcode 4.4(来自 App Store),但我仍然在某个地方安装了 Xcode 3。我通过运行uninstall-devtools 解决了这个问题,它删除了 Xcode 3,以及 Library 和 Developer 文件夹中的所有各种路径。我不确定为什么 Xcode 的冲突安装会导致这样的问题,但删除 Xcode 3 解决了它。我希望这对遇到此类问题的人有所帮助 - 这肯定不是我预期的问题。

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多