Как исправить ошибку «fatal error - cygheap base mismatch found» при использовании git в Windows 10?

Как исправить ошибку «fatal error - cygheap base mismatch found» при использовании git в Windows 10?

При использовании git в Windows 10 (1803) некоторые команды выдают следующую ошибку:

git submodule add https://github.com/..../......git ......
      3 [main] basename (13656) C:\.....\basename.exe: *** fatal error - cygheap base mismatch detected - 0x64313400/0x11E3400.
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.

Как мне решить эту проблему?

решение1

Существует несколько возможных причин этой ошибки.

Например, у вас действительно может быть конфликтующая версия DLL.

Однако в последних версиях Windows 10 имеется набор дополнительных встроенных функций защиты, которые изначально были частью Microsoft EMET.

В частности, ASLR (Рандомизация макета адресного пространства) функция безопасности несовместима с исполняемыми файлами UNIX, включенными в установку Git для Windows.

Чтобы исправить эту проблему, откройте настройки защиты от эксплойтов, перейдите на вкладку «Параметры программы» и добавьте имена исполняемых файлов, указанные в ошибках (их может быть довольно много).

В приведенном примере вы можете ввести только путь basename.exeили полный путь, если вы немного более параноидальны.

Для каждого исполняемого файла отключите защиту ASLR.

Для получения дополнительной информации см. следующую проблему на GitHub:

https://github.com/desktop/desktop/issues/3096

решение2

После включения обязательного ALSR по умолчанию в Windows 10.

Мне нужно отключить ForceRelocateImages для всех исполняемых файлов git-bash. Для этого создайте небольшой скрипт PowerShell или введите непосредственно в PowerShell код ниже. Вам нужно запустить PowerShell от имени администратора.

Get-Item -Path "C:\Program Files\Git\usr\bin\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }
Get-Item -Path "C:\Program Files\Git\bin\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }
Get-Item -Path "C:\Program Files\Git\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }

После этого git-bash работает нормально.

решение3

Для меня решением было удалить несовместимый msys-2.0.dll. Сообщение об ошибке "cygwin" неверно.

Если у вас msys-2.0.dllна коробке несколько файлов, это может вызвать проблемы. Удалите их все, кроме того, который находится рядом с вашими командами git (c:\program files\git....)

Или, если вам нужно несколько версий, измените PATH так, чтобы при использовании команды git версия MSYS64 dll не была найдена.

решение4

  1. Переименование msysdll может помочь:https://stackoverflow.com/a/74463416/2377343

  2. Вы можете попробовать отключить ASLR:https://stackoverflow.com/a/76296598/2377343

Связанный контент