Переопределение typedef для UInt32 в MacTypes.h, из определения в CFBase.h

Я получаю ошибку переопределения typedef в двух строках в MacTypes.h, в следующем фрагменте кода:

#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.

Вывод ошибок Xcode

Я вычеркнул путь к файлу, который включает в себя <Carbon/Carbon.h> так как он содержит имя моего клиента (файл одинаков для обеих ошибок). Ниже приведены полные имена путей (все они содержатся в Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks):

  • Carbon.framework / Заголовки / Carbon.h: 20
  • CoreServices.framework / Заголовки / 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__ это просто приходит с грузом #ifс и #ifdefs. Кто-нибудь знает, откуда могла появиться эта ошибка?

3

Решение

В конце концов оказалось, что эта проблема была связана с несколькими установками XCode: я недавно установил XCode 4.4 (из App Store), и у меня все еще была где-то установка XCode 3. Я решил это, запустив uninstall-devtools который удалил Xcode 3 вместе со всеми его различными путями в папках Library и Developer. Я не уверен, почему конфликтующие установки Xcode могут вызвать такую ​​проблему, но удаление Xcode 3 решило ее. Я надеюсь, что это поможет любому, у кого есть такая проблема — это, конечно, не то, чего я ожидал.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]