creating static/dynamic lib (_minit remains unresolved)
Manuel König
manuelk89 at gmx.net
Wed Jan 17 13:14:25 PST 2007
Sean Kelly schrieb:
> 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
Many Thanks, Sean. You saved more thand 11.000 lines of code! I searched
hours for that, is there any documentation? If not, there really should
be one!
Manuel König
More information about the D.gnu
mailing list