2012-05-07 19 views
4

"バスエラー"はしばしばプログラミングエラーです。しかし、私は本当に三行プログラムでこのようなエラーを表示することはできません。(非常に)シンプルなopencvプログラム(Mac OS Xの場合) "bus error"

int main(int argc, char** argv) 
{ 
    IplImage *src = cvLoadImage("/tmp/Name.tiff", CV_LOAD_IMAGE_COLOR); 
    IplImage* res = cvCreateImage(cvSize(2, 2), IPL_DEPTH_8U, 3); 
    cvSaveImage("/tmp/image.tiff", src); 
    return 0; 
} 

私は次のようにコンパイルします。

gcc -I/Library/Frameworks/OpenCV.framework/Versions/A/Headers /usr/local/lib/libopencv_* test.c

実行がバスエラーを与えます。

非常に重要:2行目を削除すると(cvCreateImageへの呼び出し)、問題なく動作します。

私はIplImage *src = cvLoadImage("/tmp/Name.tiff", CV_LOAD_IMAGE_COLOR);が成功した場合は検証しないopencv 2.3 and MacOs 10.8.5, gcc (i686-apple-darwin9-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5566)

+1

スタックトレースはありますか?また、**はMac OS 10.8.5を使用していません**、それは確かです。 – trojanfoe

+1

サマービルドコマンドラインで試しましたか?(ソースファイルの後ろに '-l'で必要なライブラリを指定していますか?)(あなたが指定したライブラリと一致するヘッダはありますか?) – Mat

+1

あなたのコンパイラ呼び出しが奇妙です。代わりに '-f'(ramework)オプションを指定してgccを呼び出すのはなぜでしょうか?フレームワーク内のパスとライブラリを正確に扱うようにしました – sansuiso

答えて

1

を使用しています。私はそれがファイルを見つけたり、それをデコードしたり、何か他のものを見つけられなかったと仮定します。残りのすべては悪い工学的実践の結果である。

$ cat src/bus.cpp 
#include <opencv2/opencv.hpp> 

int main(int argc, char** argv) 
{ 
    IplImage *src = cvLoadImage("/tmp/Name.tiff", CV_LOAD_IMAGE_COLOR); 
    if(src==NULL) { 
    printf("There is no /tmp/Name.tiff\n"); 
    exit(1); 
    } 
    IplImage* res = cvCreateImage(cvSize(2, 2), IPL_DEPTH_8U, 3); 
    cvZero(res); 
    cvSaveImage("/tmp/Name.tiff", src); 
    return 0; 
} 
$ 
$ convert ~/ScanImage001.png /tmp/Name.tiff 
$ ./bus 
$ 

Macで動作します。