
On Thu, May 6, 2010 at 12:42 PM, Jürgen Hunold <juergen.hunold@ivembh.de> wrote:
I've got a working patch set lying around. Please find it attached. Real life got in the way (as usual)...
Your patch has been VERY helpful, and I've used it as the starting point! Thanks!
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 { ... }; 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. In addition to that change, I've moved the definitions from win32.hpp into the specific compilers involved. These visibility macros are compiler extensions to C++, and are starting to show up in platforms other than Windows. I've also edited the docs changes somewhat. So far, I've only made changes to Boost.System. See the attached. (I've also made a lot of tweaks to Boost.System tests, but those are of limited interest so aren't included in the attached diff.) Unless there are objections, I'll commit these to trunk, and wait until tests have cycled for several days before doing anything with other libraries. We will want to alert developers of other libraries, as some of them will prefer to make their own changes. Others will be happy if someone else makes the changes. Comments appreciated! --Beman