Building several dynamic libraries with one shared GC

NonNull non-null at use.startmail.com
Sun Sep 12 20:10:43 UTC 2021


On Sunday, 12 September 2021 at 18:56:50 UTC, Ali Çehreli wrote:
> All initialization functions of the plugins were called 
> automatically in my D test environment and all plugins were 
> usable. The trouble started when the main library was being 
> used in a foreign environment (something like Python loading 
> Python loading C++ library loading our D library): Although the 
> initialization function of the main library was being called, 
> the 'shared static this' functions of the plugins were not 
> being called.
>
> (I tried dlopen after guessing intelligently the name of the 
> 'shared static this' function (not obvious); it was not 
> satisfactory and I don't remember exactly why not.)
>
> Later I learned, this could be because merely loading a plugin 
> might not be enough, and perhaps the main library might have to 
> use a feature of the library as well:
>
>   https://forum.dlang.org/post/sdb5jb$2rk3$1@digitalmars.com
>
[...]
>
> > If several plugins are built by different third parties, each
> dynamic
> > library will have its own GC and copy of druntime right now.
>
> Like the user 'frame', I don't think that's the case.


I hope you're right about this last. Not sure how static versus 
dynamic linking affects it. ldc2 seems to default to dynamic 
linking for phobos and have druntime in a dynamic library too. 
[Not clear what DMD does with druntime when it dynamically links 
to phobos.] In that ideal situation you seem to be right. Not 
sure how a plugin can be distributed as an executable only (to 
those without a D compiler installed) without static linking and 
then what? I have a mess to sort out.
Any info or suggestions?



More information about the Digitalmars-d-learn mailing list