Posix dynamic library initialization and finalization

Paul O'Neil via Digitalmars-d digitalmars-d at puremagic.com
Fri Dec 12 17:56:03 PST 2014


On 12/12/2014 07:38 PM, Adam D. Ruppe wrote:
> I was just talking on IRC with someone about a dynamic library on linux
> in D being called from a C program. The runtime wasn't initialized and
> he couldn't modify the C program to add an extra call.
> 
> I kidna thought rt_init would be done automatically in a constructor
> segment in the library, but it isn't.
> 
> Interesting, there is a solution in the druntime source tree... but it
> isn't compiled in. found in this thread
> http://forum.dlang.org/thread/knk5ql$2np2$1@digitalmars.com
> 
> this is the file:
> https://github.com/D-Programming-Language/druntime/blob/master/src/rt/dylib_fixes.c
> 
> 
> And I tried it on Linux - compile that separately, then link in the
> object file in the D program - and everything was beautiful and perfect
> and there was much happy singing.
> 
> 
> Why isn't that dylib_fixes file used anywhere in the druntime makefiles?
> I guess one difficulty would be you don't want it called in a regular
> program.... but actually, is that bad? I think they just bump up a
> refcount if called twice, so that's no big deal, or even dmain could be
> changed not to call them, instead opting for the loader's magic.
> 
> Alternatively, the compiler could insert the magic sections when
> compiling with -shared and leave it the way it is for the others.
> 
> 
> Is there a problem with that if it was a D program loading the D library?
> 
> 
> 
> Another thing we could do is provide a way to access those magic
> attributes from D - pragma(elf_constructor) maybe - and then provide
> like a library mixin like we're doing for Windows DLLMain now - and
> document it so te users can find it.
> 
> 
> In any case, documenting that existing dylib_fixes.c would be nice if it
> is a good solution. It seems to be to me though!

Is there a problem with calling rt_init multiple times from multiple
shared libraries?

-- 
Paul O'Neil
Github / IRC: todayman


More information about the Digitalmars-d mailing list