Subject: Re: mismatched dll
From: Bob Rossi <[email-masked]>
To: Eric Blake <[email-masked]>
Cc: [email-masked]
Date: Thu, 2 Feb 2006 15:54:52 -0500

On Thu, Feb 02, 2006 at 08:42:34PM +0000, Eric Blake wrote:
> > > No.  There must be only ONE cygwin1.dll on your entire system.  It
> > > should be in your cygwin /bin directory.  Period.
> > 
> > Wow, that seems very inflexible. Is this a design decision?
> 
> Yes.  Cygwin DEPENDS on shared memory between processes,
> in order to emulate POSIX semantics.  If you have two different
> .dlls trying to share the same memory, but with different
> ideas of what the semantics of that memory are, you invariably
> have problems.  Cygwin prints out the error message you saw
> rather than trying to be backwards compatible to all earlier
> releases of the .dll in how this shared memory is used, because
> it is just easier that way.

OK. I understand the concept of having each application share a single
.dll, this is to save space. Unix does this with shared objects. 

However, here's what I don't understand. Please explain to me why 
my thinking is fault. A program called p_v1 depends on v1.dll.
Another program called p_v2 depends on v2.dll. For every p_v1 or 
p_v2 you start, only a single version of the associated dll is opened.

The reason this design is nice is because you can have multiple versions
of the .dll installed, and they will be shared between executables
nicely.

On Cygwin, for some reason you assert this condition is not true. I
believe that what you are asserting is based in fact, and would really
like to understand why.

> > BTW, this worked before I upgraded cygwin. So it is at least possible if
> > they are the same version?
> 
> Possible?  Yes.  Wise?  No.  You are tempting fate - almost
> as surely as you try this, you will forget to upgrade one of
> the two copies, and be right back at this issue.  Hence the
> official stance of this list is to only ever have a SINGLE
> cygwin1.dll on your machine.

By moving the cygwin1.dll in the executable directory, things begin to
work. However, I don't understand how it's assumed that the new
cygwin1.dll acts the same as the one the executable was linked against.
See what I mean?

Another reason I'm asking is, I was trying to think of how I could
package CGDB for people.

Thanks for the great help,
Bob Rossi

--
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/