creating static/dynamic lib (_minit remains unresolved)

Sean Kelly sean at f4.ca
Wed Jan 17 12:05:52 PST 2007


Manuel König wrote:
> Hi there,
> 
> I've got a problem creating libraries with gdc (Windows-version). I want 
> to build a library in D using gdc and link it against a C-program using 
> gcc. Since the spec says I have to do some module startup I have to call 
> _minit() like this:
> 
> // in library.d:
> extern (C)
> {
>     void gc_init();
>     void gc_term();
>     void _minit();
>     void _moduleCtor();
> }
> 
> extern(C) export void initLibrary()
> {
>     gc_init();           
>     _minit();        // <== initialize module list
>     _moduleCtor();
> }
> 
> As you can see I export this function, so that my C-prog can call that 
> to initialize the library. Building the (static) library and linking it 
> to a C-program works fine with dmd and dmc. But when I use gdc/gcc, my 
> library compiles without errors, but linking it against my C-program gives:
> 
>     undefined reference to '_minit'
> 
> Hence this functions? implementation is not in my lib. I tried linking 
> "libgphobos" against both gdc and gcc in any combination, but the 
> problem remains.
> 
> I tried building it without this init stuff, and gdc built the library, 
> I could link it with my C-prog and call the exported functions, but for 
> sure it gave errors when memory got allocated 'n stuff. But this shows 
> that its no general library creation problem, rather an unresolved 
> external.
> 
> Does anyone know how to get rid of this problem? (or show me that I'm a 
> noob and theres a totally different approach for gdc ...)

See internal/dgccmain2.d.  GDC's startup routine is different from 
DMD's, which suggests that a function be provided to generalize library 
startup of D code.  However, I think what you need to do is this:

     _STI_monitor_staticctor();
     _STI_critical_init();
     gc_init();
     _moduleCtor();
     _moduleUnitTests();


Sean


More information about the D.gnu mailing list