2016-03-25 21 views
0

mingw kullanarak windows xp'de aseprite (https://github.com/aseprite/aseprite) derlemeye çalışıyorum. Ben cmake ile hiçbir sorun vardı ve linker dxguid.obj bağlamaya çalışır kadar yapmak. Sonra ben aşağıdaki hatayı alırsınız:msys (MinGW) dxguid.obj bağlama

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' 

dxguid ve libuiid arasında bir tanım çarpışma gibi görünüyor. Libuiid'i kaldırmayı denedim ama bağlayıcı tarafından gerekli. Yani, bu durumu nasıl çözeceğimi bilmiyorum.

cevap

0

Bu kitaplıkların her ikisi de (DXGUID ve UUID) aslında hiçbir kod içermez, yalnızca GUID'leri tanımlamak için veri segmentleri. Her iki kütüphane de GUID'i tanımlamak için iyi olmalıdır.

Bu, Visual C++ ile otomatik olarak #pragma __declspec(selectany) aracılığıyla işlenir. Eğer guiddefs.h bakarsanız görürsünüz: GCC

#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 

bu __attribute__((weak)) denk olmalıdır.