【问题标题】:Issues compiling C (Not C++) OpenCV code编译 C(非 C++)OpenCV 代码的问题
【发布时间】:2014-07-12 07:52:18
【问题描述】:

我最近从 (http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip/download) 安装了 OpenCV。鉴于我目前正在尝试做的事情,我认为使用 Ubuntu (12.0.4) 存储库不会有什么不同。这是它非常基本的功能。

我可以毫无问题地运行位于http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html 的C++ 代码。

但是,当我尝试使用 OpenCV 的纯 C 方面时,我的问题就开始了。

我正在尝试编译以下 C 代码:

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

int main(int argc, char** argv){

    if ( argc != 2 ){
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }

    IplImage* img = cvLoadImage( argv[1], CV_LOAD_IMAGE_COLOR );
    cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
    cvShowImage("Example1", img);
    cvWaitKey(0);
    cvReleaseImage( &img );
    cvDestroyWindow( "Example1" );
    return 0;
}

使用以下命令行

gcc DisplayImage.c -o DisplayImage.out -I /usr/local/include/opencv -L /usr/local/lib -lm -lcv -lhighgui -lcvaux

但出现以下错误

/usr/bin/ld: cannot find -lcv
/usr/bin/ld: cannot find -lhighgui
/usr/bin/ld: cannot find -lcvaux
collect2: error: ld returned 1 exit status

看了一个类似的帖子后(见https://stackoverflow.com/questions/18029712/cannot-find-opencv-libraries-in-ubuntu-12-04),我运行了命令

$ pkg-config --cflags opencv

得到了

-I/usr/local/include/opencv
-I/usr/local/include  

我也跑了

$ pkg-config --libs opencv

得到了

/usr/local/lib/libopencv_calib3d.so
/usr/local/lib/libopencv_contrib.so
/usr/local/lib/libopencv_core.so
/usr/local/lib/libopencv_features2d.so
/usr/local/lib/libopencv_flann.so
/usr/local/lib/libopencv_gpu.so
/usr/local/lib/libopencv_highgui.so
/usr/local/lib/libopencv_imgproc.so
/usr/local/lib/libopencv_legacy.so 
/usr/local/lib/libopencv_ml.so 
/usr/local/lib/libopencv_nonfree.so 
/usr/local/lib/libopencv_objdetect.so 
/usr/local/lib/libopencv_ocl.so 
/usr/local/lib/libopencv_photo.so 
/usr/local/lib/libopencv_stitching.so 
/usr/local/lib/libopencv_superres.so 
/usr/local/lib/libopencv_ts.a 
/usr/local/lib/libopencv_video.so 
/usr/local/lib/libopencv_videostab.so 
-lrt 
-lpthread 
-lm
-ldl 

不知何故,最后一部分看起来与我预期的有很大不同(与上一篇文章中的输出不同)。我可能是错的,所以请耐心等待,因为我还是 Linux 新手。

是否会使用下载的 ZIP 而不是存储库包导致这种情况,或者还有其他我不明白的地方。

【问题讨论】:

  • c api 不再是一个真正的选择。请避免它。他们已经在 2010 年放弃了它,转而使用 c++ api。您尝试链接的库也不再存在。

标签: c linux opencv linker


【解决方案1】:

在命令行使用pkg-config(构建应用程序的辅助工具)编译:

 gcc -Wall -g $(pkg-config  --cflags opencv) DisplayImage.c \
     $(pkg-config --libs opencv) -o DisplayImage

$( ... ) 符号就像 shell 的反引号。它插入一些命令的输出(这里是pkg-config 的)。

更好的是,受this example 的启发,编写自己的Makefile 并仅使用make 命令进行编译。

gcc 的参数顺序非常重要!

【讨论】:

  • 好吧.....所以在看到一些类似的帖子之后,我首先尝试了 gcc DisplayImage.c -o DisplayImage.out -I /usr/local/include/opencv -lm -lcv -lhighgui - lcvaux pkg-config --cflags --libs opencv 然后我尝试了 gcc DisplayImage.c -o DisplayImage.out -I /usr/local/include/opencv pkg-config --cflags --libs opencv 这似乎成功了。我的新问题是与链接和编译有关的pkg-config --cflags --libs opencv 行是什么? -杰夫
  • 关注我的[改进]答案中的所有链接!
  • 之前忘了提。不过谢谢。特别是对于快速响应。
猜你喜欢
  • 2011-07-07
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多