【问题标题】:"bus error" with a (very) simple opencv program (with Mac Os X)带有(非常)简单的 opencv 程序(使用 Mac Os X)的“总线错误”
【发布时间】:2012-05-15 22:04:31
【问题描述】:

我知道“总线错误”通常是由于编程错误造成的。但是在三行程序中我真的看不到这样的错误:

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

执行导致总线错误

非常重要:如果我删除第二行(对cvCreateImage 的调用),它可以正常工作。

我正在使用opencv 2.3 and MacOs 10.8.5, gcc (i686-apple-darwin9-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5566)

【问题讨论】:

  • 你有堆栈跟踪吗?你也没有使用 Mac OS 10.8.5,这是肯定的。
  • 您是否尝试过使用更健全的构建命令行(例如在源文件之后使用-l 指定您需要的库?(并且您那里的标头是否与您指定的库匹配?)
  • 你的编译器调用很奇怪。为什么不使用 -f(ramework) 选项调用 gcc 呢?正是为了正确处理框架内的路径和库而设计的
  • cvLoadImage 调用成功了吗?
  • @user1379617:这不是我问的。您指向的标题是您自己安装的吗? (将标题放在“官方”目录中而将库放在自定义目录中看起来很奇怪)而且您的“链接器”部分是,抱歉,疯了。你根本不应该这样做。

标签: c macos gcc opencv


【解决方案1】:

您不验证IplImage *src = cvLoadImage("/tmp/Name.tiff", CV_LOAD_IMAGE_COLOR); 是否成功。我认为它无法找到文件或解码它或其他任何东西。一切都只是糟糕的工程实践的结果。

$ 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 上适合我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2012-09-21
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多