Can I create static c callable library?

Steven Schveighoffer schveiguy at gmail.com
Tue Sep 25 16:10:32 UTC 2018


On 9/25/18 10:13 AM, Jacob Carlborg wrote:
> On Tuesday, 25 September 2018 at 12:05:21 UTC, Jonathan M Davis wrote:
> 
>> If you use -betterC, then it's trivial, because your D program is 
>> restricted to extern(C) functions and features which don't require 
>> druntime. It can also be done without -betterC (and thus with 
>> druntime), but it gets to be _way_ more of a pain, because it requires 
>> that you manually initialize druntime - either by forcing whatever is 
>> using your "C" library to call a specific function to initialize 
>> druntime before using any of its normal functions or by having every 
>> function in the library check whether druntime has been initialized 
>> yet and initialize it if it hasn't been before it does whatever it's 
>> supposed to do.
> 
> Shouldn't it be possible to use a C initialization function, i.e. 
> pragma(crt_constructor) to initialize druntime? Then it only needs to be 
> initialized once and it's not required to check if it's initialized all 
> the time.

I don't know if that's the right call. pragma(crt_constructor) tasks run 
*before* C main. If you are initializing the runtime, it means you are 
running D static ctors.

Since C initialization functions have no order to them, it's possible 
that some initialization functions in the D runtime are using 
uninitialized pieces of the C runtime. But of course, I'm not sure. I 
just wouldn't trust it if it were me. We don't test initializing the D 
runtime before C main is started (in which case, the C runtime is 
guaranteed to be set up).

Does anyone know if the C runtime is set up before these functions are 
run? Is it guaranteed?

-Steve


More information about the Digitalmars-d-learn mailing list