Subject: Re: DLL Problem
From: [email-masked] (Fergus Henderson)

25 Aug 1997 16:48:47 -0700
Approved: [email-masked]
Distribution: cygnus
Message-ID: <[email-masked]>
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Original-To: [email-masked] (Roland Geier)
Original-Cc: [email-masked] (Cygnus GNU-win32 mailing list)
In-Reply-To: <[email-masked]> from Roland Geier at "Aug 21, 97 10:48:23 pm"
X-Mailer: ELM [version 2.4ME+ PL15 (25)]
Original-Sender: [email-masked]

Roland Geier wrote:
> [someone wrote:]
> > I'm trying to port a tcl module from unix to win95 as a dll to load within
> > wish.
....
> > ext+0x15):libcmain.cc: undefined reference to `GetCommandLineA@0'
> > c:/gnuwin32/b18/H-i386-cygwin32/i386-cygwin32/lib/libcygwin.a(libcmain.o)(.t
> >
> > ext+0x1e):libcmain.cc: undefined reference to `WinMain@16'
> >
> > This seems to be a reentrancy problem, since a simple call like :
> > fprintf(stderr, ...)
> 
> ...for me this seems to be a forgotten '-lkernel32' at link-time :). The
> undefined ref to 'WinMain' can be avoided with:
> 
>         echo 'int main() { return 0; }' > fixup.c;
>         echo 'asm (".section .idata$3\n" ".long 0,0,0,0,0,0,0,0");' >> fixup.c;
>         gcc -c fixup.c
>         # link fixup.o with your dll...

Defining main() will supress the link error, but it will not actually
fix the problem.  The startup file (crt0.o, I think) containing a
definition of `_impure_ptr' will be linked in, but _impure_ptr will
not be initialized.  This means that any reference to global variables
such as `stdout' or `stderr' from within your DLL will be broken, and
so your DLL will probably crash.

To avoid the problem, you need to initialize your DLL's _impure_ptr
from the main program.  See <http://www.cs.mu.oz.au/~fjh/gnu-win32>
for an example of how to do this.

-- 
Fergus Henderson <[email-masked]>   |  "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh>   |  of excellence is a lethal habit"
PGP: finger [email-masked]         |     -- the last words of T. S. Garp.
-
For help on using this list (especially unsubscribing), send a message to
"[email-masked]" with one line of text: "help".