I am writing a program using OpenCV calls and I want to compile it and make the executable. I already read the gcc tutorial but I still would like to know exactly how to link the OpenCV libraries I am using. My command and the related output is below:
$ gcc -I/home/savio/opencv-3.0.0/include/opencv -L/home/savio/opencv-3.0.0/cmake_binary_dir/lib \ > -lopencv_core -lopencv_highgui -lopencv_imgproc imagefilter.c -o imagefilter /tmp/ccDUEgAk.o: nella funzione "cvDecRefData": imagefilter.c:(.text+0xa6a): riferimento non definito a "cvFree_" imagefilter.c:(.text+0xaf2): riferimento non definito a "cvFree_" /tmp/ccDUEgAk.o: nella funzione "cvGetRow": imagefilter.c:(.text+0xc08): riferimento non definito a "cvGetRows" /tmp/ccDUEgAk.o: nella funzione "cvGetCol": imagefilter.c:(.text+0xc36): riferimento non definito a "cvGetCols" /tmp/ccDUEgAk.o: nella funzione "cvReleaseMatND": imagefilter.c:(.text+0xc50): riferimento non definito a "cvReleaseMat" /tmp/ccDUEgAk.o: nella funzione "cvSubS": imagefilter.c:(.text+0xdac): riferimento non definito a "cvAddS" /tmp/ccDUEgAk.o: nella funzione "cvCloneSeq": imagefilter.c:(.text+0xde5): riferimento non definito a "cvSeqSlice" /tmp/ccDUEgAk.o: nella funzione "cvSetNew": imagefilter.c:(.text+0xe52): riferimento non definito a "cvSetAdd" /tmp/ccDUEgAk.o: nella funzione "cvGetSetElem": imagefilter.c:(.text+0xefa): riferimento non definito a "cvGetSeqElem" /tmp/ccDUEgAk.o: nella funzione "cvReadIntByName": imagefilter.c:(.text+0xfa9): riferimento non definito a "cvGetFileNodeByName" /tmp/ccDUEgAk.o: nella funzione "cvReadRealByName": imagefilter.c:(.text+0x1053): riferimento non definito a "cvGetFileNodeByName" /tmp/ccDUEgAk.o: nella funzione "cvReadStringByName": imagefilter.c:(.text+0x10e6): riferimento non definito a "cvGetFileNodeByName" /tmp/ccDUEgAk.o: nella funzione "cvReadByName": imagefilter.c:(.text+0x1126): riferimento non definito a "cvGetFileNodeByName" imagefilter.c:(.text+0x113c): riferimento non definito a "cvRead" /tmp/ccDUEgAk.o: nella funzione "cvContourPerimeter": imagefilter.c:(.text+0x1170): riferimento non definito a "cvArcLength" /tmp/ccDUEgAk.o: nella funzione "cvCalcHist": imagefilter.c:(.text+0x11b2): riferimento non definito a "cvCalcArrHist" /tmp/ccDUEgAk.o: nella funzione "cvEllipseBox": imagefilter.c:(.text+0x127e): riferimento non definito a "cvEllipse" /tmp/ccDUEgAk.o: nella funzione "cvFont": imagefilter.c:(.text+0x12c8): riferimento non definito a "cvInitFont" /tmp/ccDUEgAk.o: nella funzione "main": imagefilter.c:(.text+0x1396): riferimento non definito a "cvLoadImage" imagefilter.c:(.text+0x13af): riferimento non definito a "cvGetSize" imagefilter.c:(.text+0x13c1): riferimento non definito a "cvCreateImage" imagefilter.c:(.text+0x13ed): riferimento non definito a "cvSmooth" imagefilter.c:(.text+0x1403): riferimento non definito a "cvSaveImage" imagefilter.c:(.text+0x141b): riferimento non definito a "cvReleaseImage" imagefilter.c:(.text+0x1427): riferimento non definito a "cvReleaseImage" collect2: error: ld returned 1 exit status $ How should I correctly specify the libraries?
I ran the command below. It compiles and links but does not run correctly:
$ gcc imagefilter.c -o imagefilter -I/home/savio/opencv-3.0.0/include/opencv \ > -L/home/savio/opencv-3.0.0/cmake_binary_dir/lib \ > -lopencv_imgcodecs -lopencv_imgproc -lopencv_highgui -lopencv_core $ ./imagefilter lena_noise.BMP ./imagefilter: error while loading shared libraries: libopencv_imgcodecs.so.3.0: cannot open shared object file: No such file or directory $ What else am I missing?