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

Lỗi:Không thể biên dịch chương trình opencv đầu tiên, '/ usr/bin/ld: không thể tìm thấy -lcv'

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

Code:

#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; 
} 

Đó là 32 bit,

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 

Cài đặt OpenCV-2.4.0 trong/usr/local, tôi cũng có hệ thống python-opencv. Tôi đang làm sai ở đâu? Tôi nên làm gì?

+0

Nếu bạn đang sử dụng hệ thống 64 bit, có lẽ bạn nên sử dụng '-L/usr/local/lib64'. Dù sao, hãy cố gắng tìm 'định vị libcv.so' – aland

+0

Nó là 32 bit,' định vị libcv' = /usr/lib/libcv.so.2.1 /usr/lib/libcv.so.2.1.0 – shibly

+0

bản sao có thể có của [OpenCV trên ubuntu 11.10] (http://stackoverflow.com/questions/7781302/opencv-on-ubuntu-11-10) – karlphillip

Trả lời

6

Như đã thấy từ changelog được xuất bản trên trang OpenCV (cho phiên bản 2.2), tên thư viện đã thay đổi từ phiên bản 2.2 trở đi, do đó tên thư viện được sử dụng để liên kết cho phiên bản 2.1 không thể được sử dụng để biên dịch với phiên bản 2.4 (tức là libcv.so được liên kết qua -lcv không phải là tên thư viện hợp lệ cho phiên bản> 2.1 như vậy). Bạn cần phải vượt qua các thư viện là một phần của phiên bản OpenCV mới (đã được liệt kê thông qua lệnh pkg-config). Bạn có thể sử dụng pkg-config để chuyển trình biên dịch & liên kết cờ một cái gì đó trên các dòng sau: g++ cv.cpp -o cv $(pkg-config --cflags --libs opencv).
Hy vọng điều này sẽ hữu ích!

1

Bạn có phiên bản 2.1 trong /usr/lib trong khi phiên bản cài đặt mới 2.4 là trong /usr/local/lib, cần phải khắc phục điều đó và chắc chắn rằng lib ld phát hiện là một trong những bạn biên soạn/liên kết cho.

+1

Làm thế nào tôi có thể chắc chắn rằng ld tìm thấy cái mới? – shibly

0

Tôi gặp sự cố tương tự với opencv 2.4 và là sự cố tương thích. Nếu bạn muốn sử dụng phiên bản mới nhất, hãy xóa phiên bản trước của opencv để tránh sự cố này hoặc các vấn đề về vị trí của lib khi bạn biên dịch.

Các vấn đề liên quan