[odb-users] ODB exception problem

cetoni GmbH - Uwe Kindler uwe.kindler at cetoni.de
Fri Jun 10 07:20:10 EDT 2011


Hi Boris,

thank you for the response.

We use the MinGW  build with GCC 4.5.1 from here (now there is already 
the version 4.5.2 available but we still use 4.5.1):

http://tdm-gcc.tdragon.net/

Like I mentioned it in my last mail we use this MinGW version since over 
a year now without any trouble. Our projects are plugin based and use 
DLLs extensively and we never had any problems throwing and catching 
exceptions across DLL boundaries so this is quite strange.

This is what the compilers readme file says about exceptions and DLLs:

*** Exceptions and DLLs ***

With the advent of the GCC 4.5 release series, the mingw32 port finally 
supports
fully the same method every other platform uses to allow exceptions to 
propagate
out of shared libraries (DLLs): gcc library DLLs. For any GCC language that
supports exceptions (and DLLs), this method requires the runtime 
presence of two
additional DLLs: (1) libgcc_s*.dll, which contains common core data, and 
(2) a
language-specific DLL.

However, TDM-GCC also continues to integrate a versioned shared memory 
region
for the *static* (non-DLL) runtime libraries, which will still allow you to
throw exceptions between any DLLs or executables that are built with 
TDM-GCC.
This method incurs a very small execution overhead as compared to the shared
library method, but has the very important benefit of not requiring you to
redistribute extra DLLs with your program.

By default, TDM-GCC will continue to create executables and DLLs that 
use the
static libraries and do not require you to redistribute further DLLs. If you
would like to use the shared libraries, you should add "-shared-libgcc" 
to the
command line to use a shared version of libgcc, and additionally ensure 
that the
shared version of your language-specific runtime library is being used. 
For C++,
add "-shared-libstdc++".

You cannot use a shared version of libgcc with a static version of a 
language-
specific runtime. The reverse -- static libgcc with shared language-specific
runtime -- should work fine.

 From reading this documentation it should be possible to throw 
exceptions even if we do not use shared versions of libgcc and 
libstdc++. I modified the ODB example under 
odb-examples-1.4.0/schema/custom to throw an exception and it shows the 
same behaviour - the exception is not caught. Now I'm going to try to 
use the shared versions and will tell you about the results.

Uwe



More information about the odb-users mailing list