windows 的 git 中的 cygheap 不匹配错误

cygheap mismatch error in git for windows

正在尝试 运行 shell 脚本 Git Bash。这个特定的脚本需要 Rcpp 和 RcppArmadillo 包。 (创建一个用 C++ 实现的 R 包)因为我在 Windows 系统上,所以我必须安装 Rtools40。执行 sh 命令后出现错误:

fatal error - cygheap base mismatch detected - 0x180316408/0x180317408.
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. 按照错误消息中的说明进行操作。但是,搜索 cygwin1.dll 是空的。此外,我从未在我的机器上安装过 Cygwin。
  2. 正在将 Windows 的 R、Rtools40 和 Git 更新到最新版本。这是非常需要的(显然 Windows 不会自动更新这些程序 sigh)但它没有解决错误消息。
  3. 关闭 Windows 安全设置中的 ASLR 保护,如 this post and this post 中所述。
  4. 正在从我的驱动器中删除重复的 msys-2.0.dll 文件。这最终奏效了。我会post详细解答这个问题

希望这对像我一样一直在筛选许多未完全回答此问题的 post 的人有所帮助。

这就是我解决这个问题的方法。据我了解,Git Bash 中的错误消息已过时且具有欺骗性。它引用了 Cygwin,但 Git Bash 实际上使用的是 MSYS2,而不是 Cygwin。因此,我无需搜索 cygwin1.dll,而是需要在我的驱动器中搜索 msys-2.0.dll。该文件存在于两个位置:Git\usr\bin 和 rtools40\SOMETHING(我不记得确切的路径,但它与 Rtools40 相关联)。根据错误消息中的说明,我删除了旧版本,恰好是与 Rtools40 相关联的版本。我的驱动器上只剩下一个版本的 msys-2.0.dll,然后 sh 命令在 Git Bash 中执行,没有任何问题。

我还在疑惑的是:为什么GitBash中的错误信息还没有更新? Cygwin 和 MSYS2 有什么区别?我知道它们都在 Windows 上强加了 UNIX 环境,但两者各有优缺点吗?在长运行中,如果我想通过命令行执行脚本,Git Bash可持续吗,还是我应该在我的机器上创建一个Linux分区?