Desperately looking for a work-around to load and unload D shared libraries from C on OSX

ponce via Digitalmars-d digitalmars-d at puremagic.com
Thu Sep 17 09:54:08 PDT 2015


On Thursday, 17 September 2015 at 16:42:52 UTC, bitwise wrote:
>
> One solution which could work is to disallow static linking of 
> druntime on OSX completely....meaning, either don't even 
> distribute a static druntime for OSX, or make shared druntime 
> the default. This way, druntime would only ever be initialized 
> once per process. Knowing this, linux ctors/dtors could be 
> added to druntime to initialize it, eliminating the need to 
> call rt_init/rt_term before and after main(). Also, if druntime 
> were loaded into a C-hosted binary, druntime would 
> automatically be initialized by the ctors/dtors. Also, for the 
> ctors/dtors, they could be added to the druntime build, and 
> wouldn't having to be compiler generated.
>
> I'm not sure about the difference in performance cost over 
> static vs shared druntime, but it seems that this is the way 
> things are done on OSX. If you look in /usr/lib/ on a mac, 
> practically everything is a shared lib.
>
>     Bit

I use static linking of druntime already all the time and rely on 
it to be able to do something instead of nothing (where would I 
even found that shared druntime?). Apart from this one horrible 
bug, static runtime seems very much working. Remove possibilities 
to do work would make my situation worse.

I can call rt_init / rt_term at the right place with LDC global 
constructor/destructors no problem. The problem is this callback 
that cannot be removed. Don't know why it's there in the first 
place since by definition a shared library can't control when 
it's unloaded.






More information about the Digitalmars-d mailing list