
On Wednesday, 19. May 2010 18:36:21 you wrote:
Beman Dawes wrote:
The patch introduces two Boost.Config macros - BOOST_SYMBOL_EXPORT - BOOST_SYMBOL_IMPORT
AFAICT, a third macro is needed for GCC. I've named it BOOST_SYMBOL_VISIBLE and define it as __attribute__((visibility("default")))
The need for this macro arises in header only classes like this: class BOOST_SYMBOL_VISIBLE my_exception : public
std::runtime_error { ... };
Okay, I'm not used to exceptions (legacy code...) .
If you use BOOST_SYMBOL_EXPORT, VC++ will warn because __declspec(dllexport) isn't valid in this context. If you don't decorate my_exception at all, VC++ is happy, but GCC shared libraries compiled with -fvisibility=hidden can't successfully throw exceptions up to callers outside the shared library. The only way around that I can see is to use a separate macro that is only defined for GCC.
Note: some of this funtionality, or something similar, might already be found in boost/serialization/force_include.hpp
Yes, this is be # define BOOST_USED __attribute__ ((used)) isn't it ? I've skipped most of serialization/archive due the non-standard definition of the export/import macros. And it is the only library which has a special case for Borland #if defined(__BORLANDC__) #define BOOST_SERIALIZATION_DECL(T) T __export I'm not sure if this is still needed and why you decided to use this syntax. I hope that you can shed some light on this and maybe unify those macros, too. Yours, Jürgen -- * Dipl.-Math. Jürgen Hunold ! Ingenieurgesellschaft für * voice: ++49 511 262926 57 ! Verkehrs- und Eisenbahnwesen mbH * fax : ++49 511 262926 99 ! Lister Straße 15 * juergen.hunold@ivembh.de ! www.ivembh.de * * Geschäftsführer: ! Sitz des Unternehmens: Hannover * Prof. Dr.-Ing. Thomas Siefer ! Amtsgericht Hannover, HRB 56965 * PD Dr.-Ing. Alfons Radtke !