From: Danny S. <dan...@cl...> - 2007-05-07 08:25:34
|
Brendon Costa 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. Danny |