我在SuperUser上发布了这个...但是我希望SO的专业人士可能对如何解决这个问题有一个好主意....
通常我们在VS 2005 Pro中开发,但我想给VS 2010一个旋转。我们有基于GNU make工具的自定义构建工具,这些工具在创建可执行文件时被调用。
这是我在调用外部工具时看到的错误:
... \ gnu \ make.exe):***无法为cygwin堆提交内存,Win32错误487
需要注意的是,它在VS2005中仍能完美运行,并且可以直接从命令行调用。此外,我的外部工具设置与VS 2005完全相同。
是否有某些设置可能会导致抛出此错误?
答案 0 :(得分:1)
来自cygwin email lists看起来其他人遇到类似的情况,即使没有通过Visual Studio运行,他们发现解决方案经常与Cygwin的最大内存设置一起使用:< / p>
http://www.cygwin.com/cygwin-ug-net/setup-maxmem.html
(注意:值得reading this conversation,从上面来看,有些值已经完成但没有效果。)
其他人也报告了反病毒软件的问题(建议是出于某种原因从内存中卸载),也可能还有兼容性设置(尝试将其设置为XP),这在某些情况下会影响cygwin。请参阅:http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=377066
对于Visual Studio:您是否使用64位计算机,如果是这样,您通常在64位环境中运行该工具?
我发现因为Visual Studio 2010以32位运行,所以从它启动的工具是作为32位进程启动的(为了很好地说明这一点,添加“cmd”作为工具)。我不确定为什么这不会在2005年受到影响(除非2005让系统启动进程(64位),2010自己处理它(32位))。
答案 1 :(得分:1)
来自problem with heap, win32 error 487:
每个Cygwin应用程序都有一个特殊的堆 区域用于保存继承的东西 到子进程。例如。所有文件 描述符结构存储在 堆区域(称为“cygheap”)。 cygheap至少有4000个空间 文件描述符结构。但是 - 这是线索 - 这是固定的大小。该 cygheap无法成长。它的大小是 在应用程序开始时保留 并且它的块被提交 需求。
出于某种原因你的服务器 应用程序需要所有的cygheap 在描述下运行时的空间 条件。
可能会在Changing Cygwin's Maximum Memory中找到可能的解决方案:
Cygwin的堆是可扩展的。然而, 它确实从一个固定的大小开始 尝试扩展它可能会遇到 以前的记忆 由Windows分配。在某些情况下, 这个问题可以通过添加来解决 中的一个条目 HKEY_LOCAL_MACHINE(改变 所有用户的限制)或 HKEY_CURRENT_USER(仅适用于 当前用户)注册表部分。
添加DWORD值heap_chunk_in_mb 并将其设置为所需的内存限制 以十进制MB表示。这是优选的 这在Cygwin中使用了regtool 程序包含在Cygwin中 包。 (有关的更多信息 regtool或其他Cygwin工具, 请参阅“Cygwin”一节 实用程序“或使用--help选项 每个工具。)你应该永远 从那以后使用regtool时要小心 损坏您的系统注册表即可 导致系统无法使用。这个 示例将内存限制设置为1024 MB:
regtool -i set /HKLM/Software/Cygwin/heap_chunk_in_mb 1024 regtool -v list /HKLM/Software/Cygwin
退出所有正在运行的Cygwin进程和 重启他们。可以分配内存 达到系统交换的大小 空间减去任何大小 运行过程。系统交换 应该至少和。一样大 物理安装的RAM,可以 在系统类别下修改 控制面板。
确保Windows交换文件的最大大小足够大并不会有害。
总结:环境没有为cygwin可执行文件分配足够的堆空间。出于某种原因,VS2010 Express的问题更为严重。您需要修复环境,或使用除cygwin之外的其他Linux端口,或使用Microsoft实用程序。