gcc cc1:内存不足分配

时间:2012-07-02 06:55:59

标签: linux gcc stack ccl

我正在尝试使用Angstrom Linux在我的BeagleBoard中编译源代码。 昨天我能够编译我的代码。但今天我无法编译代码,它说:

ccl: out of memory allocating 268439608 bytes after a total of 405504 bytes
make *** [getimagefromcam1.o] Error 1

我的编译字符串是:

gcc getimagefromcam1.c `pkg-config --cflags --libs opencv` -o getimagefromcam1 -lpthread

代码是:

#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include <stdio.h>

int main(int argc, char* argv[])
{    
  CvCapture* camera = cvCreateCameraCapture(0); // Use the default camera

  IplImage*     frame = 0;
  IplImage      img;

  cvSetCaptureProperty(camera,CV_CAP_PROP_FRAME_WIDTH,2016) ;
  cvSetCaptureProperty(camera,CV_CAP_PROP_FRAME_HEIGHT,1512); 

  frame = cvQueryFrame(camera); //need to capture at least one extra frame
  frame = cvQueryFrame(camera);

  if (frame != NULL) {
    printf("got frame 1\n\r");
        cvSaveImage("webcam1.jpg", frame,0);
  } else {
      printf("Null frame 1\n\r");
  }

    frame = cvQueryFrame(camera); //need to capture at least one extra frame
  frame = cvQueryFrame(camera);

  if (frame != NULL) {
    printf("got frame 1\n\r");
        cvSaveImage("webcam1.jpg", frame,0);
  } else {
      printf("Null frame 1\n\r");
  }
  cvReleaseCapture(&camera);
  return 0;
}

当我写“免费”时说

 total       used       free     shared    buffers     cached
Mem:        241260     221256      20004          0      13748     116184
-/+ buffers/cache:      91324     149936
Swap:            0          0          0

我该如何解决?

1 个答案:

答案 0 :(得分:10)

你明显失去了记忆(268439 > 221256)。现在您有两个选择:

  1. 像这样创建temporary swap file。归结为:

    su - root
    # for one GB of swap
    dd if=/dev/zero of=tmpswap bs=1024 count=1M
    mkswap tmpswap
    swapon tmpswap
    

    我会选择这种方式作为快速修复,更不用说你真的应该与少量内存进行一些交换。

    如果您希望永久更改此文章,请阅读该文章,其中包含有关权限和fstab的一些有价值的提示。

  2. 尝试简化代码,以便cc1不需要那么多内存。不知道怎么做。