2012-05-04 17 views
5
g++ cv.cpp -o cv -I /usr/local/include/opencv 
    -L /usr/local/lib -lm -lcv -lhighgui -lcvaux 

error:no puede compilar primer programa OpenCV, '/ usr/bin/ld: no puede encontrar -lcv'

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

Código:

#include <cv.h> 
#include <ml.h> 
#include <cxcore.h> 
//#include <cxtypes.h> 
#include <highgui.h> 

int main(int argc, char* argv[]) 
{ 
    IplImage* img = cvLoadImage("bal.png"); 
    cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE); 
    cvShowImage("Example1", img); 
    cvWaitKey(0); 
    cvReleaseImage(&img); 
    cvDestroyWindow("Example1"); 
    return 0; 
} 

Es de 32 bits,

locate libcv 
/usr/lib/libcv.so.2.1 
/usr/lib/libcv.so.2.1.0 

`pkg-config --cflags --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_photo.so 
/usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_ts.so 
/usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so 

Instalado OpenCV-2.4.0 en/usr/local, también tengo un sistema python-opencv. ¿Dónde estoy cometiendo el error? ¿Que debería hacer?

+0

Si está en el sistema de 64 bits, probablemente debería usar '-L/usr/local/lib64'. De todos modos, intenta 'localizar libcv.so' – aland

+0

Es de 32 bits,' locate libcv' = /usr/lib/libcv.so.2.1 /usr/lib/libcv.so.2.1.0 – shibly

+0

posible duplicado de [OpenCV en ubuntu 11.10] (http://stackoverflow.com/questions/7781302/opencv-on-ubuntu-11-10) – karlphillip

Respuesta

6

Según el changelog publicado en el sitio OpenCV (para la versión 2.2), los nombres de la biblioteca han cambiado de la versión 2.2 en adelante, por lo que los nombres de biblioteca utilizados para vincular para la versión 2.1 no se pueden libcv.so que está vinculado a través de -lcv no es un nombre de biblioteca válido para la versión> 2.1 y así sucesivamente). Debe pasar las bibliotecas que son parte de la nueva versión de OpenCV (que se han enumerado a través del comando pkg-config). Puede hacer uso de pkg-config para pasar el compilador & indicadores del vinculador algo en estas líneas: g++ cv.cpp -o cv $(pkg-config --cflags --libs opencv).
Espero que esto ayude!

1

tiene la versión 2.1 de /usr/lib mientras que la nueva versión instalada 2.4 está en /usr/local/lib, tienen que arreglar eso y asegurarse de que los lib ld hallazgos es el que compilado/vinculado para.

+1

¿Cómo puedo asegurarme de que ld encuentre el nuevo? – shibly

0

Tuve un problema similar con el opencv 2.4 y era un problema de compatibilidad. Si desea utilizar la versión más reciente, elimine la versión anterior de opencv para evitar este problema o los problemas de la ubicación de lib al compilar.