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

त्रुटि:पहले opencv कार्यक्रम संकलन नहीं कर सकते, '/ usr/bin/ld: -lcv नहीं मिल रहा है'

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

कोड:

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

यह 32 बिट,

है
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 

ओपनसीवी-2.4.0/usr/local में स्थापित, मेरे पास एक सिस्टम पायथन-ओपनसीवी भी है। मैं गलती कहां कर रहा हूं? मुझे क्या करना चाहिए?

+0

यदि आप 64 बिट सिस्टम पर हैं, तो आपको शायद '-L/usr/local/lib64' का उपयोग करना चाहिए। वैसे भी, 'libcv.so' का पता लगाने का प्रयास करें – aland

+0

यह 32 बिट है,' libcv' = /usr/lib/libcv.so.2.1 /usr/lib/libcv.so.2.1.0 – shibly

+0

[ओपनसीवी ऑन पर संभावित डुप्लिकेट ' उबंटू 11.10] (http://stackoverflow.com/questions/7781302/opencv-on-ubuntu-11-10) – karlphillip

उत्तर

6

changelog OpenCV साइट (2.2 संस्करण के लिए) पर प्रकाशित से देखा के रूप में, पुस्तकालय के नाम 2.2 संस्करण के बाद से बदल गया है, तो पुस्तकालय संस्करण 2.1 के लिए लिंक करने के लिए उपयोग होने वाले नाम संस्करण 2.4 के साथ संकलित करने के लिए नहीं किया जा सकता (यानी libcv.so जो -lcv के माध्यम से जुड़ा हुआ है संस्करण संस्करण 2.1 के लिए वैध लाइब्रेरी नाम नहीं है)। आपको पुस्तकालयों को पारित करने की आवश्यकता है जो ओपनसीवी के नए संस्करण का हिस्सा हैं (जिन्हें pkg-config कमांड के माध्यम से सूचीबद्ध किया गया है)। आप इन लाइनों पर कंपाइलर & लिंकर झंडे को पास करने के लिए pkg-config का उपयोग कर सकते हैं: g++ cv.cpp -o cv $(pkg-config --cflags --libs opencv)
आशा है कि इससे मदद मिलती है!

1

आप जबकि नए स्थापित संस्करण 2.4 /usr/local/lib में है /usr/lib में संस्करण 2.1 है, कि ठीक करने और यह सुनिश्चित करें lib ld पाता एक आप संकलित/के लिए जुड़ा हुआ है बनाने की जरूरत है।

+1

मैं कैसे सुनिश्चित कर सकता हूं कि एलडी नया पाता है? – shibly

0

मुझे ओपनसीवी 2.4 के साथ एक ही समस्या थी और एक संगतता मुद्दा था। यदि आप नवीनतम संस्करण का उपयोग करना चाहते हैं, तो संकलित करते समय इस समस्या या lib स्थान की समस्याओं से बचने के लिए opencv के पिछले संस्करण को हटा दें।

संबंधित मुद्दे