[gcc] Cannot allocate memory [resolved]

最近在项目中遇到一个奇怪的问题,具体的报错如下

make[1]: stat: ../../../crypto/asn1/tasn_enc.c: Cannot allocate memory

这个问题看起来是GCC的问题,最后的解决方案确让人有点意外,若有耐心,继续往下面读。

 

第一眼看上去,好像是内存不够,想当然的在命令行跑了一下free -m,其结果令人诧异,因为可用内存居然还剩下有70%之多。

偿试google. 得到如下连接

1, http://wiki.vpslink.com/Prevent:_Compiling_Yields_%27Cannot_allocate_memory%27

  细读之,大概意思是说gcc 默认认为host主机上内存为母机上的总内存,内存分配释放全交由gcc自己管理,大概是说,关于内存,gcc你自己看着办吧。看起来有点意思,我的guest为4G<vm设置的>,母机为windows7 8G,好像可以一试,

  于是乎,开始跑下面的命令

  ulimit -v 60000

  心里还是不踏实,再加一行

  ulimit -m 60000

  继续 make clean && make

  几分钟后,可恶的Cannot allocate memory 继续出现,这不科学。肯定哪里搞错了,细想之,仍然无解,继续google

这次得到的连接如下

2, http://hostingfu.com/article/compiling-with-gcc-on-low-memory-vps

  主要是这两个参数的调整,ggc-min-expand,ggc-min-heapsize 

  再一次尝试

 CFLAGS="$CFLAGS --param ggc-min-expand=0 --param ggc-min-heapsize=8192"

  继续 make clean && make

   几分钟后,可恶的Cannot allocate memory 继续出现,这太不科学。(开始想踢主机了)

  

回想一下,这个问题以前都没出现,最近开始用虚拟机时才遇到的,于是继续切换回物理机器

  make clean && make 

  过了一会,Cannot allocate memory 还是来了。

  

  为了还原之前一直没出错的环境 ,这一次没有mount windows上面的文件,而是直接在物理机器上svn up

  make clean && make

  1个小时后,问题仍然没有重现,直到编译完成。

  为了避免是因为人品,运气爆发而没遇到的情况 ,反复make clean && make 三次。问题仍然没有重现。

  到此,至少我们可以确定,这至少与mount windows共享目录相关。

继续google , mount cannot allocate memory

  得到如下连接

  http://hi.baidu.com/zhangbin101004/item/e459f4d1f818dfbd33db903b  

  1. Set “HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache” to “1″.
  2. Set “HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size” to “3″.

  根据描述 ,regedit ,然后找到相应的项修改

    a, 打开windows任务管理器,结束 explorer.exe,再启动explorer.exe

    b, 进debian重新mount windows目录。

    c, make clean && make

  可恶的cannot allocate memory 再也没有出现过,世界突然安静了。

  至此,虽然还不太明白 具体的原因是什么,但问题基本解决。 

  再回味一下解决问题的过程,简直无法直视,明明是debian下面提示内存分配失败,却通过修改windows的注册表解决了。常规思维里面,debian与windows唯一的关联就是网络共享,为什么gcc不报网络错误,而要报个内存分配失败?

 

 

 

posted @ 2013-12-18 13:23  copys  阅读(1529)  评论(0)    收藏  举报