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