
Robert Ramey writes:
Following up,
I've been investigating the problem with STLPort builds of the serialization system. I believe that the explanation why your tests fail and mine pass are due to the fact that your tests build/test using the stlport dll and I was using the static library version.
Now I'm building with the DLL libraries and I'm getting similar results to those you are.
I believe the problem is that STLPort file _locale.h contains code like the following:
class _STLP_CLASS_DECLSPEC locale { ... template <class _Facet> locale(const locale& __loc, _Facet* __f) : _M_impl(0) { ... } };
Where _STLP_CLASS_DECLSPEC is defined as __declspec( dllimport ) when the header is used for purpose other than building the stlport dll.
The templated constructor is invoked by the serialization library. Unfortunately, the functions for the locale class definition is already compiled and already in the dll. At link time the template - even inline - are not found.
Right.
I would characterize this a conflict between the class export dll implementation and templated constructors - which this implemention requires.
I'm not yet sure how to handle this now - anyone who wants can post a suggestion. Meanwhile, I'll keep thinking about it.
I don't think we have a lot of options here -- either we need to modify your Jamfile to specifically request static linking when testing with 'msvc-stlport' toolset, or markup the failures as "expected" with a note explaining the issue. -- Aleksey Gurtovoy MetaCommunications Engineering