Связывание dxguid.obj в msys (MinGW)

я пытаюсь собрать асеприт (https://github.com/aseprite/aseprite) в Windows XP, используя Mingw. У меня не было проблем с cmake и make, пока компоновщик не попытается связать dxguid.obj. Затем я получаю следующую ошибку:

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 и libuiid. Я попытался удалить libuiid, но он нужен компоновщику. Итак, я не знаю, как решить эту ситуацию.

0

Решение

Обе эти библиотеки (DXGUID и UUID) на самом деле не содержат никакого кода, только сегменты данных для определения GUID. Любая библиотека должна подойти для определения GUID.

Это обрабатывается автоматически в Visual C ++ через #pragma __declspec(selectany), Если вы посмотрите в guiddefs.h вот увидишь:

#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

В GCC это должно быть эквивалентно __attribute__((weak)),

0

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

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

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