This is the mail archive of the cygwin 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]

Why are the 32- and 64-bit cygwin1.dlls incompatible?


If you try something like this from a Cygwin 64 install:

    $ /cygdrive/c/cygwin32/bin/ls

you get an error like this:

    3 [main] ls (8168) C:\cygwin32\bin\ls.exe: *** fatal error -
    cygheap base mismatch detected - 0x0/0x612A0950.

It goes on to explain that this is due to trying to load an incompatible cygwin1.dll.

My best guess is that this happens because the standard Windows DLL search logic[1] says "oh, I already have a CYGWIN1 module loaded, I will use that one." And boom.

Yet, if that were truly what's going on, DLL redirection[2] should fix it. From Cygwin 64 again:

    $ touch /cygdrive/c/cygwin32/bin/ls.exe.local
    $ /cygdrive/c/cygwin32/bin/ls
    same complaint as before

Another oddity is that the inverse test succeeds.  From Cygwin 32:

    $ /cygdrive/c/cygwin64/bin/ls
    all   my   base
    $

In another forum[3], Yaakov told me that Windows is supposed to be taking CPU bitness into account here, which should be another way for it to work without special help. I don't see mention of such a rule in [1], however.

What is really going on here?

Understand, I'm not asking because I want it fixed. I mean, it'd be *nice* if it were fixed, but I'm more interested in knowing why it is the way it is.



[1] http://goo.gl/j2g1EL
[2] http://goo.gl/IVI6CE
[3] http://goo.gl/2HcAZk

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


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