[xsd-users] Issue with using xsd generated code in DLLs with
	Visual Studio 2010
    Boris Kolpackov 
    boris at codesynthesis.com
       
    Fri Sep 17 09:40:49 EDT 2010
    
    
  
Hi Timo,
Timo Geusch <timo.geusch at styleadvisor.com> writes:
> It looks like Microsoft did change the implementation of their standard
> library in VS2010 however, and as a side effect it appears that classes
> which derive from standard C++ classes like std::basic_string etc trigger
> an export of their base class's symbols. In other words, the class
> xsd::cxx::string as defined in cxx/tree/types.hxx results in the DLL
> exporting most of std::basic_string. Try to link two DLLs that both
> use and export a generated schema and the build will fail with the
> linker complaining about duplicate symbols.
I think this can be resolved by exporting the types in the XML Schema
namespace. Here is how this can be done:
1. Generate the XML Schema namespace headers with the --export-xml-schema
   and --export-symbol options, for example:
   xsd cxx-tree --generate-xml-schema --export-xml-schema \
   --export-symbol XML_SCHEMA_EXPORT xml-schema.xsd
2. Place the generated file into a "root" DLL of your DLL hierarchy.
   By root I mean that this DLL will be used by all other DLLs that
   use XSD generated code.
   If no other C++ source file uses the xml-schema.hxx header in
   this DLL, then create a dummy file, say xml-schema.cxx, include
   xml-schema.hxx into it, and add it to the project (this will
   make sure the types are actually instantiated and exported).
   The XML_SCHEMA_EXPORT macro should expand to __declspec(dllexport)
   when building this DLL and to __declspec(dllimport) otherwise.
   Normally you would create the standard "export" header and include
   it into xml-schema.hxx with --hxx-prologue option.
3. Compile all your other schemas with the --extern-xml-schema xml-schema.xsd
   option so that they all use the header generated on step 1.
Let me know if this works for you.
Boris
    
    
More information about the xsd-users
mailing list