9

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

どうすれば解決できますか?

4

1 に答える 1

17

明らかにメモリ不足です ( 268439 > 221256)。次の 2 つのオプションがあります。

  1. このような一時的なスワップ ファイルを作成します。要約すると、次のようになります。

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

    その少量のメモリで実際に少しスワップする必要があることは言うまでもありませんが、私はこの方法を簡単な修正として選択します。

    この変更を永続的にしたい場合は、この記事を読んでください。パーミッションと fstab に関する貴重なヒントが含まれています。

  2. cc1大量のメモリを必要としないように、コードを単純化してください。しかし、それを行う方法がわかりません。

于 2012-07-02T07:02:00.633 に答える