git for windows中的cygheap不匹配错误



尝试在Git Bash中运行shell脚本。这个特殊的脚本需要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:cygwinbin, 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. 正在将R、Rtools40和Git for Windows更新到最新版本。这是非常需要的(显然Windows不会自动更新这些程序叹息(,但它没有解决错误消息
  3. 如本文和本文所述,在Windows安全设置中关闭ASLR保护
  4. 正在从驱动器中删除重复的msys-2.0.dll文件。这最终奏效了。我将详细发布解决方案,作为对这个问题的回答

希望这能帮助任何像我一样一直在筛选许多没有完全回答这个问题的帖子的人。

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

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

我在GitHub上看到一篇帖子,提到如果你在得到一个";资源暂时不可用";错误,那么问题可能是您运行的是32位版本的Git。安装Git 64位,你的问题应该会消失

最新更新