From: Danny Smith <dannysmith@cl...> - 2007-05-07 08:25:34
Sent: Monday, 7 May 2007 4:42 p.m.
> Now this combination also uses threads and exceptions in C++. I have
> found that when throwing exceptions they often do strange things to
> the stack like unwinding the stack in a different thread etc (This
> sort of thing also happens when -mthreads is not used to compile and
> link all the code).
> I have seen similar symptoms before when i wasn't using -mthreads, but
> ALL code for this application, static library and DLL are compiled and
> linked using -mthreads.
> Reading in archives of the C++ forums i saw that the problem is most
> likely because of the static libgcc library that is linked into both
> the application and the DLL implicitly by GCC.
> Is this correct or have things changed?
> I.e. Is it not possible with "out of the box MinGW" (I.e. not
> rebuilding libgcc) to create applications that use shared libraries
> with threads and exceptions?
There is local patchset in mingw version of gcc 3.4.2 that was supposed
to allow thread-safe eh-unwinding across dll boundaries. It usually
works. I think you may have hit a case of a global varable (in
libsupc++/eh_globals.cc) that was missed (ie, not shared across dll and
exe) up until gcc 3.4.4 or 3.4.5. The gcc-3.4.5 candidate on the SF
download site may solve your problem. Unfortunately, adding the missing
shared pointers make gcc-3.4.5 incompatible with gcc-3.4.2 so
everything will need to be rebuilt.
The real solution is to put the eh-unwind code in libgcc into
libgcc_s.dll and to build libstdc++ as a dll too.