From: Al S. <al....@sc...> - 2001-09-27 13:26:31
Attachments:
Al Slater (E-mail).vcf
|
Hi, I am building an application that requires exceptions to be thrown accross DLL boundaries. I have built a DLL version of libgcc.a as described in http://www.geocrawler.com/archives/3/6013/2000/12/0/4789494/ . But when I try to link a program using my libraries I get the following error message: g++ -fguiding-decls -w -g -fno-inline -dynamic -mno-cygwin -o dbtest dbtest.o dbtest_o.o -L/usr/mingw/lib/gcc-lib/mingw32/2.95.3-4 -lstdc++ -L/export/home /aslate/develop/ultrapos/win/alodbc/bin -lodbcpp -L. -lupdb -lupc -lgcc -L/u sr/mingw/lib -lodbc32 dbtest.o: In function `$_9raid_vols': /export/home/aslate/develop/ultrapos/db_tier/bin/win/../../include/db_access .h(.text$__tfPc+0x1a): undefined reference to `char type_info node' collect2: ld returned 1 exit status make: *** [testing] Error 1 As you can see, I am using cygwin gcc with the -mno-cygwin switch. If I try to link the program with an added tinfo2.o (extracted from libgcc.a - and contains char type_info node) the program successfully links, but when I try to run it, a window pops up with the message "The procedure entry point __builtin_delete could not be found in the dynamic link library gcc.dll" If I use nm against gcc.dll I can see __builtin_delete defined : >nm libgcc.dll | grep __builtin_delete 10006274 T ___builtin_delete Any ideas? Al Slater Support Supervisor Stanton Consultancy al....@sc... +44 (0)1273 666607 |
From: <dan...@ya...> - 2001-09-28 05:04:15
|
--- Al Slater <al....@sc...> wrote: > Hi, > > I am building an application that requires exceptions to be thrown > accross > DLL boundaries. > > I have built a DLL version of libgcc.a as described in > http://www.geocrawler.com/archives/3/6013/2000/12/0/4789494/ . > > But when I try to link a program using my libraries I get the > following > error message: > > g++ -fguiding-decls -w -g -fno-inline -dynamic -mno-cygwin -o dbtest > dbtest.o > dbtest_o.o -L/usr/mingw/lib/gcc-lib/mingw32/2.95.3-4 -lstdc++ > -L/export/home > /aslate/develop/ultrapos/win/alodbc/bin -lodbcpp -L. -lupdb -lupc > -lgcc -L/u > sr/mingw/lib -lodbc32 > dbtest.o: In function `$_9raid_vols': > /export/home/aslate/develop/ultrapos/db_tier/bin/win/../../include/db_access > .h(.text$__tfPc+0x1a): undefined reference to `char type_info node' > collect2: ld returned 1 exit status > make: *** [testing] Error 1 > Have all libs (ie, -lupdb -lupc ) been built to link against dll version of libgcc? If not that is probably the problem. If yes (and if libgcc.dll.a was built with recent version of ld), then you could try --enable-auto-import to automatically link __tic (`char type_info node') reference to __imp___tic (which should be in libgcc import lib). Danny http://travel.yahoo.com.au - Yahoo! Travel - Got Itchy feet? Get inspired! |
From: Al S. <al....@sc...> - 2001-09-28 08:03:38
|
Thanks, I have found the problem. I think I was getting clashes between different versions of mingw. Also, I found that I had to use the gcc.dll created in step 7 (http://www.geocrawler.com/archives/3/6013/2000/12/0/4789494/) not the one created by step 5. I am not convinced that step 5 is at all necessary. The 2 dlls are the same size, but diff reports them as different. Al > -----Original Message----- > From: Danny Smith [mailto:dan...@ya...] > Sent: 28 September 2001 06:04 > To: al....@sc...; min...@li... > Subject: Re: [Mingw-users] Dlls and exceptions > > > --- Al Slater <al....@sc...> wrote: > Hi, > > > > I am building an application that requires exceptions to be thrown > > accross > > DLL boundaries. > > > > I have built a DLL version of libgcc.a as described in > > http://www.geocrawler.com/archives/3/6013/2000/12/0/4789494/ . > > > > But when I try to link a program using my libraries I get the > > following > > error message: > > > > g++ -fguiding-decls -w -g -fno-inline -dynamic -mno-cygwin -o dbtest > > dbtest.o > > dbtest_o.o -L/usr/mingw/lib/gcc-lib/mingw32/2.95.3-4 -lstdc++ > > -L/export/home > > /aslate/develop/ultrapos/win/alodbc/bin -lodbcpp -L. -lupdb -lupc > > -lgcc -L/u > > sr/mingw/lib -lodbc32 > > dbtest.o: In function `$_9raid_vols': > > > /export/home/aslate/develop/ultrapos/db_tier/bin/win/../../inc > lude/db_access > > .h(.text$__tfPc+0x1a): undefined reference to `char type_info node' > > collect2: ld returned 1 exit status > > make: *** [testing] Error 1 > > > > Have all libs (ie, -lupdb -lupc ) been built to link against dll > version of libgcc? If not that is probably the problem. > > If yes (and if libgcc.dll.a was built with recent version of ld), then > you could try --enable-auto-import to automatically link __tic (`char > type_info node') reference to __imp___tic (which should be in libgcc > import lib). > > Danny > > > > http://travel.yahoo.com.au - Yahoo! Travel > - Got Itchy feet? Get inspired! > > |
From: Thomas P. <tp...@gm...> - 2001-09-28 14:52:17
|
Hi Al, the instructions from this URL do not work with the latest mingw distribution, the gcc -shared seems to be the problem. Instead of using gcc -shared -mthreads -o gcc.dll *.o try dllwrap -mthreads --export-all --dllname=gcc.dll *.o With the resulting dll it should work again. Regards, Thomas On Thu, 27 Sep 2001, Al Slater wrote: > Hi, > > I am building an application that requires exceptions to be thrown > accross > DLL boundaries. > > I have built a DLL version of libgcc.a as described in > http://www.geocrawler.com/archives/3/6013/2000/12/0/4789494/ . > > But when I try to link a program using my libraries I get the following > error message: > > g++ -fguiding-decls -w -g -fno-inline -dynamic -mno-cygwin -o dbtest > dbtest.o > dbtest_o.o -L/usr/mingw/lib/gcc-lib/mingw32/2.95.3-4 -lstdc++ > -L/export/home > /aslate/develop/ultrapos/win/alodbc/bin -lodbcpp -L. -lupdb -lupc -lgcc > -L/u > sr/mingw/lib -lodbc32 > dbtest.o: In function `$_9raid_vols': > /export/home/aslate/develop/ultrapos/db_tier/bin/win/../../include/db_ac > cess > .h(.text$__tfPc+0x1a): undefined reference to `char type_info node' > collect2: ld returned 1 exit status > make: *** [testing] Error 1 > > As you can see, I am using cygwin gcc with the -mno-cygwin switch. > > If I try to link the program with an added tinfo2.o (extracted from > libgcc.a - and contains char type_info node) the program successfully > links, > but when I try to run it, a window pops up with the message "The > procedure > entry point __builtin_delete could not be found in the dynamic link > library > gcc.dll" > > If I use nm against gcc.dll I can see __builtin_delete defined : > > >nm libgcc.dll | grep __builtin_delete > 10006274 T ___builtin_delete > > > Any ideas? > > Al Slater > > Support Supervisor > Stanton Consultancy > al....@sc... > +44 (0)1273 666607 > > > |
From: <dan...@ya...> - 2001-09-28 22:01:57
|
--- Thomas Pfaff <tp...@gm...> wrote: > Hi Al, > > the instructions from this URL do not work with the latest mingw > distribution, the gcc -shared seems to be the problem. Instead of > using > > gcc -shared -mthreads -o gcc.dll *.o > Ah, yes, by default all symbols from libgcc.a (and libstdc++.a) are excluded when building a dll using -export-all-symbols. Thats to prevent these from being included in each and every dll being built this way. The safest way is to control what goes into the dll by using a .def file. Output one with dlltool, than edit it make sure that you get what you want. > try > > dllwrap -mthreads --export-all --dllname=gcc.dll *.o > dlltool only looks at the object files, so the default exclude list is much shorter. > With the resulting dll it should work again. > > Regards, > > Thomas > http://travel.yahoo.com.au - Yahoo! Travel - Got Itchy feet? Get inspired! |