On Thu, Sep 27, 2018 at 03:11:26PM -0600, Jonathan M Davis via Digitalmars-d-learn wrote: > On Thursday, September 27, 2018 6:16:13 AM MDT Atila Neves via Digitalmars- > d-learn wrote: [...] > > Even easier, compile this C file and add the resulting object > > file to your (now mostly) D static library: > > > > ----------------------- > > extern int rt_init(void); > > extern int rt_term(void); > > > > __attribute__((__constructor__)) void dinit(void) { > > rt_init(); > > } > > __attribute__((__destructor__)) void dterm(void) { > > rt_term(); > > } > > ----------------------- > > > > The C runtime will initialise the D runtime for you. > > That's a neat trick. [...]
Indeed! Though I'm not sure what will happen if your C program tries loading two or more D libraries that use this trick... is rt_init() idempotent? If not, it could lead to a fun mess on startup... :-D It also doesn't address the very thorny issue of how to make multiple D libraries work nicely with each other's copy of druntime, or how to make them share a single druntime. T -- Без труда не выловишь и рыбку из пруда.