Use cygwin executable in git bash script

10,761

fatal error - cygheap base mismatch detected.

This problem is probably due to using incompatible versions of the cygwin DLL.

This error is caused because the Git for Windows path is incompatible with Cywin.

  • They both use /bin and /usr/bin but these map to different directories (because they use different mount tables).

  • Cywin expects to find the dll in /usr/bin/cygwin1.dll (and is not found in Git for Windows)

  • When you explicitly run any Cygwin command in a Git for Windows bash shell Cygwin cannot find its dll and generates the error message above.

  • Notice below that the mount mapping for / is different.

Git for Windows:

DavidPostill@Hal MINGW64 ~
$ mount
C:/temp on /tmp type ntfs (binary,noacl,posix=0,usertemp)
C:/apps/Git on / type ntfs (binary,noacl,auto)
C:/apps/Git/usr/bin on /bin type ntfs (binary,noacl,auto)
C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto)
E: on /e type vfat (binary,noacl,posix=0,user,noumount,auto)
F: on /f type ntfs (binary,noacl,posix=0,user,noumount,auto)

DavidPostill@Hal MINGW64 ~
$ which cygwin1.dll
which: no cygwin1.dll in (/c/Users/DavidPostill/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/DavidPostill/bin:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/apps/WSCC/Sysinternals Suite:/c/apps/WSCC/NirSoft Utilities:/c/apps/Calibre:/cmd:/mingw64/bin:/usr/bin:/usr/bin/vendor_perl:/usr/bin/core_perl)

DavidPostill@Hal MINGW64 ~
$ /c/cygwin/bin/man
      1 [main] man (608) C:\cygwin\bin\man.exe: *** fatal error - cygheap base mismatch detected - 0x180301408/0x180304408.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.
Segmentation fault

Cygwin:

$ mount
C:/cygwin/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin on / type ntfs (binary,auto)
C: on /c type ntfs (binary,posix=0,user,noumount,auto)
E: on /e type vfat (binary,posix=0,user,noumount,auto)
F: on /f type ntfs (binary,posix=0,user,noumount,auto)
$ which cygwin1.dll
/usr/bin/cygwin1.dll
$ /c/cygwin/bin/man
What manual page do you want?

There is no solution, other than don't mix and match cygwin derived utilities. Pick one and stick with it.

Share:
10,761

Related videos on Youtube

SomeDev
Author by

SomeDev

Updated on September 18, 2022

Comments

  • SomeDev
    SomeDev over 1 year

    I have a .sh script that I double-click to have it executed by git for Windows.

    Now I need (imagemagick) convert from cygwin (which I have installed) and I'm calling it with its absolute path - /c/cygwin64/bin/convert.exe - but I get:

    fatal error - cygheap base mismatch detected. This problem is probably due to using incompatible versions of the cygwin DLL.

    Wrapping the actual convert call in a cygwin bash call, or even in a cmd.exe call, doesn't help. This is a bit strange because I sometimes use cygwin executables directly in .cmd scripts, and that always worked.

    What can I do? A solution that keeps my program limited to one file would be preferred.

    (I know I could probably just install Windows-native imagemagick. But then the next day I need another cygwin tool in a git-for-Win-Shellscript .. also, I'd like to understand what's happening here. And, yes, I will probably make git for Windows obsolete in my workplace, if possible)

    • DavidPostill
      DavidPostill about 7 years
      Don't mix and match different products based on Cygwin. Use Cygwin git instead.
    • SomeDev
      SomeDev about 7 years
      Thanks for your comment. It wasn't obvious to me that git for Windows is based on cygwin. I continuously read "MinGW" .. "MSYS" etc. which doesn't sound so much like cygwin. But just for curiosity: what other products are based on cygwin?
    • SomeDev
      SomeDev about 7 years
      And am I right that the UnxUtils / GnuWin32 Tools are Windows-native? Is it true that Microsoft is working on some sort of "Linux-like environment" in Windows (including a bash and maybe other fine things)?
    • DavidPostill
      DavidPostill about 7 years
      "It wasn't obvious to me that git for Windows is based on cygwin" I'm guessing based on the dll error message. Can you check if you have multiple copes of the cygwin dll on your system?
    • DavidPostill
      DavidPostill about 7 years
      Windows 10 Anniversary Edition introduced a new feature called Windows Subsystem for Linux. It includes bash. I'm not running Windows 10 so I don't know what else it includes.
    • SomeDev
      SomeDev about 7 years
      Good guess! So it's quite a matter of "luck" that, at a given time, the .dll versions match. I should try to better understand (Windows') shared library load mechanism. I bet the other way round - calling one of the git for Windows tools from cygwin doesn't work either - /cygdrive/c/Program\ Files/Git/usr/bin/awk 'BEGIN { print "Hello world" }' => fatal error - cygheap base mismatch detected => Check .. your other hint is also quite interesting. However in that environment the executables are not .exe files, but "Linux executable", it seems. But I'll think about that.
    • jw013
      jw013 over 4 years
      Try wrapping your cygwin commands in winpty, something I found while browsing through the Git for windows release notes. The following works for me: winpty /c/cygwin64/bin/uname, outputs CYGWIN_NT-10.0.
  • Jim G.
    Jim G. about 6 years
    Thanks for the explanation. How about a solution?
  • DavidPostill
    DavidPostill about 6 years
    @JimG. There isn't one, other than don't mix and match cygwin derived utilities. Pick one and stick with it.
  • Julian Knight
    Julian Knight over 5 years
    Not helpful as there are no pointers to help with a solution. This is occuring for many people who don't have the knowledge to work out what caused it.
  • DavidPostill
    DavidPostill over 5 years
    @JulianKnight See my previous comment. I've updated the answer.
  • Julian Knight
    Julian Knight over 5 years
    Unfortunately, I am now getting this with everything associated with git. I've installed new versions but I'm not using cygwin explicitly, just git. I can't even start the git cmd line. So I can't track down what is causing the issue and fix it. Still working through this to see if it helps: github.com/desktop/desktop/issues/3096
  • Julian Knight
    Julian Knight over 5 years
    Fixed via the solution in the github link. Turn off ASLR for all of the erroring executables in Windows Exploit Protection. It then works. No need to uninstall git for Windows. It did it by adding the programme name (e.g. uname.exe) rather than the full path.
  • Julian Knight
    Julian Knight over 5 years
  • Vishrant
    Vishrant about 5 years
    this is a part of the comment section, does not answer the question.