3

次のコード チャンクの MacTypes.h の 2 行で 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 プラットフォームでは常に true であるように見えるため、なぜその typedef が評価されるのでしょうか? また、OS が提供する 2 つの定義が互いに矛盾するコンパイル パスがあるのはなぜですか?

編集: Xcode のエラーのスクリーンショットを次に示します。

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 が表示されます。このエラーの原因を知っている人はいますか?

4

1 に答える 1

2

結局、この問題はXcodeの複数のインストールが原因であることが判明しました。最近Xcode 4.4(App Storeから)をインストールしましたが、Xcode3をどこかにインストールしていました。これを解決するには、実行uninstall-devtoolsしてXcode 3を削除し、LibraryフォルダーとDeveloperフォルダー内のさまざまなパスをすべて削除しました。Xcodeのインストールの競合がこのような問題を引き起こす理由はわかりませんが、Xcode3を削除することで解決しました。私はこれがこのような問題を抱えている人に役立つことを願っています-それは確かに私が問題であると思っていたものではありません。

于 2012-10-31T11:30:31.533 に答える