Use o executável cygwin no script git bash

6

Eu tenho um script .sh que clico duas vezes para que seja executado pelo git para Windows.

Agora eu preciso (imagemagick) convert do cygwin (que eu instalei) e estou chamando-o com seu caminho absoluto - /c/cygwin64/bin/convert.exe - mas recebo:

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

Resolver a chamada convert real em uma chamada de bash do cygwin, ou mesmo em uma chamada cmd.exe , não ajuda. Isso é um pouco estranho porque às vezes eu uso os executáveis do cygwin diretamente em .cmd scripts, e isso sempre funcionou.

O que posso fazer? Uma solução que mantenha meu programa limitado a um arquivo seria preferida.

(Eu sei que provavelmente poderia apenas instalar o imagemagick nativo do Windows. Mas no dia seguinte eu preciso de outra ferramenta cygwin em um git-for-Win-Shellscript .. também, eu gostaria de entender o que está acontecendo aqui. E , sim, eu provavelmente vou tornar o git para o Windows obsoleto no meu local de trabalho , se possível)

    
por SomeDev 12.02.2017 / 10:52

1 resposta

2

erro fatal - incompatibilidade de base de cygheap detectada.

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

Este erro é causado porque o caminho do Git para Windows é incompatível com o Cywin.

  • Ambos usam /bin e /usr/bin , mas mapeiam para diretórios diferentes (porque usam tabelas de montagem diferentes).

  • O Cywin espera encontrar a dll em /usr/bin/cygwin1.dll (e não é encontrado no Git for Windows)

  • Quando você executa explicitamente qualquer comando Cygwin em um Git para o Windows bash shell, o Cygwin não pode encontrar sua dll e gera a mensagem de erro acima.

  • Observe abaixo que o mapeamento de montagem para / é diferente.

Git para 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?
    
por 12.02.2017 / 19:36