From: David G. <dav...@gm...> - 2017-04-25 14:55:42
|
If __declspec(selectany) is not used on the prototype but later used on a definition, GCC seems to ignore it, and you can get multiple-definition errors at link time. That situation can arise in code like Microsoft's usbview utility that has multiple translation units including the following headers: #include <windows.h> #include <initguid.h> #include <winioctl.h> When I have two files that include those header files in that order and I try to compile them with "i686-w64-mingw32-gcc main.c other.c -o test.exe", I get a bunch of errors like this: /home/david/tmp/ccB3GiUW.o:other.c:(.rdata+0x0): multiple definition of `GUID_DEVINTERFACE_DISK' /home/david/tmp/ccRH9Bjf.o:main.c:(.rdata+0x0): first defined here /home/david/tmp/ccB3GiUW.o:other.c:(.rdata+0x10): multiple definition of `GUID_DEVINTERFACE_CDROM' /home/david/tmp/ccRH9Bjf.o:main.c:(.rdata+0x10): first defined here This patch fixes that by adding __declspec(selectany) to the GUID declarations. Thanks! --David Grayson |