This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: linking with non-cygwin dll


Vikram,

Replies inline below.

On Wed, 30 Jul 2003 vikramshrowty@yahoo.com wrote:

> You need this for linking with third-party dlls that dont have a
> cygwin version.

Yes, you do.  The suggestion of omitting msvcrt.dll is bogus.

> I was looking through some documentation for the MKS toolkit (it's like
> a commercial alternative to cygwin) and according to it, a program that
> uses the MKS c-library can link with dlls that are in turn linked to
> msvcrt.dll (or whatever provides the msft c library). It seems that as
> long as you dont try to link in both the c-libraries simultaneously into
> the same program or dll, it is not a problem.

Same (or similar enough) with Cygwin.

> So, for code in the dll, stdout refers to msft::stdout whereas in the
> main program, it refers to cygwin::stdout. I was wondering if this is
> an issue of gcc not setting things up to properly call the dll's entry
> and exit functions or something like that. When you are linking the
> main program you do ...
>
> > gcc -Wall  -g -o test.exe test.c -L. -lgcc -ldll
>
> Note the absence of the -mno-cygwin, because your main program is a
> cygwin program.

Correct.

> Could this mean that the non-cygwin dll's entry and exit points are not
> setup to be called automatically?

No, they should be called properly.

However, note that the two runtimes are sharing the output stream (tty,
file descriptor, what have you), but aren't sharing the stdio data
structures.  Also, since the main program is linked as a Cygwin program,
msvcrt's exit() function is *not* called (the Cygwin gcc library one is
called instead).  Thus, the gcc library exit() flushes the buffers of the
gcc library's stdio implementation, and the msvcrt stdio buffers remain
unflushed.

Does the above explain things adequately?
	Igor

> On Wed, 30 Jul 2003, Martin Gainty wrote:
>
> > I would go so far as to suggest taking MSVCRT.dll off the path altogether
> > After all why have 2 runtimes?
> > -Martin
> > ----- Original Message -----
> > From: "Igor Pechtchanski" <pechtcha@cs.nyu.edu>
> > To: <vikramshrowty@fastmail.fm>
> > Cc: <cygwin@cygwin.com>
> > Sent: Wednesday, July 30, 2003 6:03 PM
> > Subject: Re: linking with non-cygwin dll
> >
> > > On Wed, 30 Jul 2003 vikramshrowty@yahoo.com wrote:
> > >
> > > > Hi,
> > > >         I had posted a query earlier about a cygwin program linking
> > > > with a non-cygwin dll. Based on the very helpful responses and some
> > > > googling around, I learnt that this is possible. But...
> > > >
> > > > heres a main.c that links with cygwin1.dll
> > > >
> > > > int main(void)
> > > > {
> > > >   printf("CYGWIN\n");
> > > >   test_dll();
> > > >   return(0);
> > > > }
> > > >
> > > > where test_dll is in a dll compiled with -mno-cygwin and is defined
> > > > like this...
> > > >
> > > > __declspec(dllexport) __stdcall void test_dll(void)
> > > > {
> > > >   printf("MSFT %d\n",i);
> > > >   fflush(stdout);
> > > > }
> > > >
> > > > This works perfectly. But, notice the fflush. If this is removed,
> > > > "MSFT" doesnt get printf'ed. I assuming that this is because the
> > > > stdout buffer in the microsoft c-library isnt getting flushed
> > > > automatically at program exit.
> > > >
> > > > Any ideas on why?? ..and how to remedy this??
> > > > --Vikram
> > >
> > > Well, gcc links the Cygwin executable with its own C runtime.  MSVCRT is
> > > another C runtime.  So, when you call the DLL, you have 2 C runtimes
> > > competing for the same output stream.  This can't be good (in fact, the
> > > results are unspecified, IIRC).  Thus, the simple remedy is: don't do
> > > that.  Either only use one runtime for output (whichever one), or fflush
> > > and pray.
> > > Igor

-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"I have since come to realize that being between your mentor and his route
to the bathroom is a major career booster."  -- Patrick Naughton


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]