2016-03-25 11 views
0

ich versuche, aseprite (https://github.com/aseprite/aseprite) in Windows XP mit Mingw zu kompilieren. Ich hatte keine Probleme mit cmake und make, bis der Linker versucht, dxguid.obj zu verknüpfen. Dann habe ich die folgende Fehlermeldung:Verknüpfung von dxguid.obj in msys (MinGW)

dxguid.lib(e:/temp/193462/obj.x86fre/misc/dxguid/daytona/objfre/i386/dxguid.obj):(.rdata[_GUID_MIN_POWER_SAVINGS]+0x0): first defined here libuuid.a(lib32_libuuid_a-uuid.o):uuid.c:(.rdata$GUID_MAX_POWER_SAVINGS[_GUID_MAX_POWER_SAVINGS]+0x0): multiple definition of `GUID_MAX_POWER_SAVINGS' 

Es scheint eine Definition Kollision zwischen dxguid und libuiid zu sein. Ich habe versucht, libuiid zu entfernen, aber es wird vom Linker benötigt. Also, ich weiß nicht, wie ich diese Situation lösen soll.

Antwort

0

Diese beiden Bibliotheken (DXGUID und UUID) enthalten eigentlich keinen Code, nur Datensegmente zum Definieren von GUIDs. Beide Bibliotheken sollten für die Definition der GUID in Ordnung sein.

Dies wird automatisch in Visual C++ über #pragma __declspec(selectany) behandelt. Wenn Sie in guiddefs.h aussehen werden Sie sehen:

#ifndef DECLSPEC_SELECTANY 
#if (_MSC_VER >= 1100) 
#define DECLSPEC_SELECTANY __declspec(selectany) 
#else 
#define DECLSPEC_SELECTANY 
#endif 
#endif 

...

#ifdef INITGUID 
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 
    EXTERN_C const GUID DECLSPEC_SELECTANY name \ 
      = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } 
#else 
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 
    EXTERN_C const GUID FAR name 
#endif // INITGUID 

In GCC dies __attribute__((weak)) gleichwertig sein sollte.