编译C(不是C+;+;)OpenCV代码时出现的问题

编译C(不是C+;+;)OpenCV代码时出现的问题,c,linux,opencv,linker,C,Linux,Opencv,Linker,我最近从()安装了OpenCV。考虑到我目前正在做的事情,我认为使用Ubuntu(12.0.4)存储库不会有什么不同。这是它最基本的功能 我能运行C++代码,没有问题。 然而,当我试图使用OpenCV的纯C方面时,我的问题就开始了 我正在尝试编译以下C代码: #include <stdio.h> #include <cv.h> #include <highgui.h> int main(int argc, char** argv){ if ( ar

我最近从()安装了OpenCV。考虑到我目前正在做的事情,我认为使用Ubuntu(12.0.4)存储库不会有什么不同。这是它最基本的功能

<>我能运行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;
}
但是我得到以下错误

/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
在查看了一个类似的帖子(请参阅)之后,我运行了这个命令

$ pkg-config --cflags opencv
得到

-I/usr/local/include/opencv
-I/usr/local/include  
/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 
我也跑了

$ pkg-config --libs opencv
得到

-I/usr/local/include/opencv
-I/usr/local/include  
/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而不是存储库软件包会导致这种情况吗,或者我不明白还有什么原因。

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

 gcc -Wall -g $(pkg-config  --cflags opencv) DisplayImage.c \
     $(pkg-config --libs opencv) -o DisplayImage
$(
..
符号类似于shell的反引号。它插入一些命令的输出(这里是
pkg config
one)

更好的方法是,受
make
命令的启发,编写自己的
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
行是关于什么的-Jeff请按照我[改进]答案中的所有链接进行操作!以前忘了提一下。但是谢谢。特别是对于快速响应,c api不再是一个真正的选项。请避免。他们已经在2010放弃它,而不是一个C++ API。此外,您尝试链接的LIB已不存在。