2012-07-02 79 views
3

我想用Angstrom Linux編譯我的BeagleBoard中的源代碼。 昨天我能夠編譯我的代碼。但今天我不能編譯代碼和它說:gcc cc1:內存不足分配

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 

我該如何解決它?

+0

你使用的是什麼版本的'gcc'?嘗試升級到最新版本(例如4.7或至少4.6)。 –

回答

7

你在那裏忘記記憶(268439 > 221256)。現在你有兩種選擇:

  1. 創建一個temporary swap file像這樣。它歸結爲:

    su - root 
    fallocate -l 1G tmpswap 
    mkswap tmpswap 
    swapon tmpswap 
    

    我會選擇這種方式速戰速決,更何況,你真的應該有一個比特交換用的內存量小。

    如果您想使此更改永久化,請閱讀文章,其中包含有關權限和fstab的一些有價值的提示。

  2. 儘量簡化您的代碼,以便cc1不需要太多內存。不知道該怎麼做。

+0

它解決了,但在這裏我看到了新的錯誤: 試圖訪問設備 mmcblk0p2結束:RW = 0,要= 34359738368,限= 15433728 試圖訪問設備的結束 mmcblk0p2:RW = 0,要= 34359738368,limit = 15433728 – user1336117

+0

聽起來不太好,但我不知道帽子可能來自哪裏。 –

+0

這聽起來像是一個硬件問題.... –

相關問題