From: <ch...@it...> - 2003-05-27 19:06:20
|
I was trying to see how far I could get when compiling WINE with mingw. [root@ch tests]# mingw32-gcc registry.o testlist.o -o advapi32_test.exe -L../../../dlls -ladvapi32 -lkernel32 -lntdll -L../../../libs/wine -lwine -L../../../libs/port -lwine_port -lm ../../../dlls/libmsvcrt.a(ds00444.o)(.text+0x0): multiple definition of `atexit' /sandbox/build/installed/automingw.34/bin/../lib/gcc-lib/mingw32/3.4/../ ../../../mingw32/lib/crt2.o(.text+0x40):crt1.c: first defined here ../../../dlls/libmsvcrt.a(ds00319.o)(.text+0x0): multiple definition of `_onexit' /sandbox/build/installed/automingw.34/bin/../lib/gcc-lib/mingw32/3.4/../ ../../../mingw32/lib/crt2.o(.text+0x60):crt1.c: first defined here Obviously the WINE libmsvcrt.a is picked up first. There is probably a reason for atexit and _onexit to be in crt2.o. Why are they not only in the mingw msvcrt import library ? What options do I have for getting around the problem ? Casper |
From: Danny S. <dan...@cl...> - 2003-05-27 20:48:34
|
----- Original Message ----- From: <ch...@it...> To: <min...@li...> Sent: Tuesday, 27 May 2003 20:06 Subject: [MinGW-dvlpr] multiple atexit ? > > I was trying to see how far I could get when compiling WINE with mingw. > > [root@ch tests]# mingw32-gcc registry.o testlist.o -o advapi32_test.exe > -L../../../dlls -ladvapi32 -lkernel32 -lntdll -L../../../libs/wine > -lwine -L../../../libs/port -lwine_port -lm > ../../../dlls/libmsvcrt.a(ds00444.o)(.text+0x0): multiple definition of > `atexit' > /sandbox/build/installed/automingw.34/bin/../lib/gcc-lib/mingw32/3.4/../ > ../../../mingw32/lib/crt2.o(.text+0x40):crt1.c: first defined here > ../../../dlls/libmsvcrt.a(ds00319.o)(.text+0x0): multiple definition of > `_onexit' > /sandbox/build/installed/automingw.34/bin/../lib/gcc-lib/mingw32/3.4/../ > ../../../mingw32/lib/crt2.o(.text+0x60):crt1.c: first defined here > > Obviously the WINE libmsvcrt.a is picked up first. > > There is probably a reason for atexit and _onexit to be in crt2.o. > Why are they not only in the mingw msvcrt import library ? > only _imp__atexit and _imp__onext are in libmscvcrt.a. They are labelled as DATA in def file to force this. The reason os make sure that we heve a different atexit in dll's than in main app. See code in crt1.c and dllcrt1.c They is another way of doing this, passing a global flag variable from crt startup code to library version of atexit/_onexit in libmingw.a but I'll have to look through my old notes. > What options do I have for getting around the problem ? Well if wine's msvcrt def file did the same thing as mingw's that would make it easy. > > Casper > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: ObjectStore. > If flattening out C++ or Java code to make your application fit in a > relational database is painful, don't do it! Check out ObjectStore. > Now part of Progress Software. http://www.objectstore.net/sourceforge > _______________________________________________ > MinGW-dvlpr mailing list > Min...@li... > https://lists.sourceforge.net/lists/listinfo/mingw-dvlpr |
From: Danny S. <dan...@cl...> - 2003-05-28 09:50:31
|
----- Original Message ----- From: "Danny Smith" <dan...@cl...> To: <min...@li...> Sent: Tuesday, 27 May 2003 21:49 Subject: Re: [MinGW-dvlpr] multiple atexit ? > > ----- Original Message ----- > From: <ch...@it...> > To: <min...@li...> > Sent: Tuesday, 27 May 2003 20:06 > Subject: [MinGW-dvlpr] multiple atexit ? > > > > > > I was trying to see how far I could get when compiling WINE with > mingw. > > > > [root@ch tests]# mingw32-gcc registry.o testlist.o -o > advapi32_test.exe > > -L../../../dlls -ladvapi32 -lkernel32 -lntdll -L../../../libs/wine > > -lwine -L../../../libs/port -lwine_port -lm > > ../../../dlls/libmsvcrt.a(ds00444.o)(.text+0x0): multiple definition > of > > `atexit' > > > /sandbox/build/installed/automingw.34/bin/../lib/gcc-lib/mingw32/3.4/../ > > ../../../mingw32/lib/crt2.o(.text+0x40):crt1.c: first defined here > > ../../../dlls/libmsvcrt.a(ds00319.o)(.text+0x0): multiple definition > of > > `_onexit' > > > /sandbox/build/installed/automingw.34/bin/../lib/gcc-lib/mingw32/3.4/../ > > ../../../mingw32/lib/crt2.o(.text+0x60):crt1.c: first defined here > > > > Obviously the WINE libmsvcrt.a is picked up first. > > > > There is probably a reason for atexit and _onexit to be in crt2.o. > > Why are they not only in the mingw msvcrt import library ? > > > > only _imp__atexit and _imp__onext are in libmscvcrt.a. They are > labelled as DATA in def file to force this. The reason os make sure > that we heve a different atexit in dll's than in main app. See code in > crt1.c and dllcrt1.c They is another way of doing this, passing a > global flag variable from crt startup code to library version of > atexit/_onexit in libmingw.a but I'll have to look through my old notes. > > > What options do I have for getting around the problem ? > > Well if wine's msvcrt def file did the same thing as mingw's that would > make it easy. > > > Would this work for quick workaround? #ifndef __DLL /* or whatever define WINE uses to flag build of dll */ extern int (*_imp__atexit)(void (*)(void)); #define atexit(_X) *_imp__atexit(_X) #else /* use the atexit/_onext in mingw's dllcrt2.o #endif (or use a static inline wrapper) Danny > > Casper |
From: Steven E. <ste...@ya...> - 2003-05-28 14:23:06
|
> Would this work for quick workaround? > > #ifndef __DLL /* or whatever define WINE uses to flag build of dll */ > extern int (*_imp__atexit)(void (*)(void)); > #define atexit(_X) *_imp__atexit(_X) > #else > /* use the atexit/_onext in mingw's dllcrt2.o > #endif > (or use a static inline wrapper) If you want me to look at this Casper, I will submit a patch to winehq when Alexandre returns from vacation. I have a few I need to send anyway. Thanks Steven __________________________________ Do you Yahoo!? Yahoo! Calendar - Free online calendar with sync to Outlook(TM). http://calendar.yahoo.com |
From: <ch...@it...> - 2003-05-28 17:02:54
|
> -----Original Message----- > From: min...@li... > [mailto:min...@li...] On Behalf Of > Danny Smith > Sent: 28. maj 2003 11:51 > To: min...@li... > Subject: Re[2]: [MinGW-dvlpr] multiple atexit ? > > > > ----- Original Message ----- > From: "Danny Smith" <dan...@cl...> > To: <min...@li...> > Sent: Tuesday, 27 May 2003 21:49 > Subject: Re: [MinGW-dvlpr] multiple atexit ? > > > > > > ----- Original Message ----- > > From: <ch...@it...> > > To: <min...@li...> > > Sent: Tuesday, 27 May 2003 20:06 > > Subject: [MinGW-dvlpr] multiple atexit ? > > > > > > > > > > I was trying to see how far I could get when compiling WINE with > > mingw. > > > > > > [root@ch tests]# mingw32-gcc registry.o testlist.o -o > > advapi32_test.exe > > > -L../../../dlls -ladvapi32 -lkernel32 -lntdll > -L../../../libs/wine > > > -lwine -L../../../libs/port -lwine_port -lm > > > ../../../dlls/libmsvcrt.a(ds00444.o)(.text+0x0): multiple > definition > > of > > > `atexit' > > > > > > /sandbox/build/installed/automingw.34/bin/../lib/gcc-lib/mingw > 32/3.4/../ > > > ../../../mingw32/lib/crt2.o(.text+0x40):crt1.c: first defined here > > > ../../../dlls/libmsvcrt.a(ds00319.o)(.text+0x0): multiple > definition > > of > > > `_onexit' > > > > > > /sandbox/build/installed/automingw.34/bin/../lib/gcc-lib/mingw > 32/3.4/../ > > > ../../../mingw32/lib/crt2.o(.text+0x60):crt1.c: first defined here > > > > > > Obviously the WINE libmsvcrt.a is picked up first. > > > > > > There is probably a reason for atexit and _onexit to be > in crt2.o. > > > Why are they not only in the mingw msvcrt import library ? > > > > > > > only _imp__atexit and _imp__onext are in libmscvcrt.a. They are > > labelled as DATA in def file to force this. The reason os > make sure > > that we heve a different atexit in dll's than in main app. See code > in > > crt1.c and dllcrt1.c They is another way of doing this, passing a > > global flag variable from crt startup code to library version of > > atexit/_onexit in libmingw.a but I'll have to look through my old > notes. > > > > > What options do I have for getting around the problem ? > > > > Well if wine's msvcrt def file did the same thing as mingw's that > would > > make it easy. > > > > > > > Would this work for quick workaround? > > #ifndef __DLL /* or whatever define WINE uses to flag build > of dll */ extern int (*_imp__atexit)(void (*)(void)); #define > atexit(_X) *_imp__atexit(_X) #else > /* use the atexit/_onext in mingw's dllcrt2.o > #endif > (or use a static inline wrapper) > > Danny Thanks. I'll try your suggestions. Casper |