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