DIP45: fixing the dllimport/dllexport issue
Martin Nowak
code at dawg.eu
Wed Sep 11 16:16:41 PDT 2013
On 09/11/2013 08:21 AM, Rainer Schuetze wrote:
> AFAIU the discussed scenario is that the phobos library exports a lot of
> symbols, and this library is used both for static and dynamic linking.
> An executable statically linked against this library will have all the
> exports. That still works but is ugly.
Yes and it also has some runtime/memory overhead because the symbol
table is much bigger.
> A DLL to be used as a plugin with a C interface might also want to link
> statically against phobos to avoid DLL hell. Consider multiple plugins
> built against different versions of phobos. These would also leak also
> the symbols.
Right, that's the valid use-case. But here the additionally exported
symbols are way less of a problem because your loading not linking.
And as I wrote before if you link a program with two copies of the same
library you're asking for trouble.
Anyhow I realized there is even less a use-case for statically linking a
lib into a DLL (shared library) while expecting the symbols to be
exported. We use that to put druntime into libphobos2.so though.
Also one doesn't need exported (visible) symbols for static linking.
So how about going into the opposite direction?
When the compiler creates a lib it strips all the exports (marks all
symbols as hidden) by default. For the very special use-case where one
wants to preserve the exports we can add a -libexports flag, only to be
used with -lib.
Another nice thing is, that dmd writes libs itself and already processes
all object files so we could easily integrate the striping in the compiler.
More information about the Digitalmars-d
mailing list