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