www.digitalmars.com         C & C++   DMDScript  

D.gnu - creating static/dynamic lib (_minit remains unresolved)

reply =?ISO-8859-15?Q?Manuel_K=F6nig?= <manuelk89 gmx.net> writes:
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()
	_minit();		// <== initialize module list

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 ...)
Jan 17 2007
parent sclytrack <sclytrack pi.be> writes:
minit is a bit of asm code,
I've seen it somewhere in a source file which I don't recall anymore
but it said that for linux the minit was included in the _moduleCtor()

found it:    moduleinit.d

// Win32: this gets initialized by minit.asm

// linux: this gets initialized in _moduleCtor()

extern (c) void _moduleCtor()
  version (linux)
     //special linux module initialization code.
//rest of code

Good luck with your shared library! :-)
Jan 17 2007