我最近从(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而不是存储库软件包会导致此问题,还是我不了解其他内容。

最佳答案

在命令行上使用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的参数顺序非常重要!

09-10 04:55
查看更多