2012-04-03 15 views
3

Ich kann mein Projekt in Xcode (4.2) für das Debugging ohne Probleme erstellen, aber wenn ich es für Release erstellen (Build für die Archivierung) bekomme ich Fehler: "Typedef Redefinition mit verschiedenen Typen (unsigned int vs unsigned long) ".Typedef Neudefinition Fehler beim Versuch, XCode-Projekt für Release

Problematische Code ist:

#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 

Sie ganze Datei auf sehen: http://read.pudn.com/downloads166/sourcecode/zip/758136/C/Types.h__.htm

vorherige Definition ist in MacTypes.h von Coreservices Rahmen.

Ich habe die gleichen Präprozessor-Makros für Debug und Release, und ich verwende Apples LLVM-Compiler 3.0. Derselbe Fehler tritt auf, wenn ich versuche, ein Projekt zur Analyse zu erstellen.

Eine Idee, warum das passiert?

+0

Ich weiß, Sie denken, Sie haben überall die gleichen Makros für die Vorverarbeitung, aber können Sie # error fail direkt in den ifdef _LZMA_UINT32_IS_ULONG Block setzen und sicherstellen, dass der Code niemals kompiliert wird? Ich habe das Gefühl, dass verschiedene Wege durch dieses ifdef für debug vs. release genommen werden, wenn Sie bestätigen, dass Sie beginnen können, warum zu verfolgen. –

+0

Kompilieren Sie für dasselbe Ziel in Debug vs Release (dh ist einer von ihnen für nur 64 Bit kompilieren und die andere Kompilierung für 32 Bit oder beide? – DRVic

+0

@DRVic Sie haben Recht, kompilierte ich nur für 64bit beim Debuggen und für die Veröffentlichung habe ich 32bit/64bit verwendet.Wenn ich nur 64bit für die Veröffentlichung gewählt habe, baut es gut.Wie kann ich es für beide 32bit/64bit kompilieren? –

Antwort

7

In dem Fall, dass Sie die Fehler sind immer (wenn 32-Bit-Kompilierung) haben Sie bereits das Äquivalent von

typedef unsigned int UInt32; <--error on this line 

(daher der Fehler) So können Sie die Codezeile löschen.

Offenbar nicht alle Ihrer Quelle/Importe MacTypes.h, so dass es zu haben, in beiden Richtungen, umgibt die Codezeile mit #ifdefs etwa so:

#ifndef __MACTYPES__ 
typedef unsigned int UInt32; 
#endif 

Leider ist dies nicht perfekt; Sie müssen sicher sein, dass, wenn MacTypes.h enthalten ist, dies vorher passiert. Ein Weg, um sicherzustellen, dass Ihr System #import vor Ihrem lokalen #imports ist.

+0

Ja, das war das erste, was in meinen Sinn kam, aber wenn ich das lösche Zeile bekomme ich Compiler-Fehler: "Unbekannter Typ Name UInt32" in anderen Teilen des Codes. –

+0

Also änderte ich meine Antwort entsprechend. Nicht ganz schön. Aber da gewesen. – DRVic

+0

Das hat super funktioniert. Danke! –