title: Install OpenCV and compile C program using GCC
body: <p>As part of a bigger project I am working on, I need to use the OpenCV library on a C program. I installed OpenCV and opencv-devel using yum in Fedora 17 32-bit. I instructed the preprocessor to import opencv/cv.h and opencv/highgui.h, as the necessary header files.</p>
  
  <p>As I've mentioned, gcc is used to compile the whole C project. However, there seems to be a problem with the linker.</p>
  
  <p>Whenever I try to compile the project (<code>gcc opencv.c -o opencv</code>), I get a list of errors, similar to:</p>
  
  <pre><code>/tmp/ccLJWE0c.o: In function `cvRound': opencv.c:(.text+0x19):
  undefined reference to `lrint' /tmp/ccLJWE0c.o: In function
  `cvDecRefData': opencv.c:(.text+0xa5c): undefined reference to
  `cvFree_' opencv.c:(.text+0xacd): undefined reference to `cvFree_'
  /tmp/ccLJWE0c.o: In function `cvGetRow': opencv.c:(.text+0xbc3):
  undefined reference to `cvGetRows' /tmp/ccLJWE0c.o: In function
  `cvGetCol': opencv.c:(.text+0xbee): undefined reference to `cvGetCols'
  /tmp/ccLJWE0c.o: In function `cvReleaseMatND': opencv.c:(.text+0xc01):
  undefined reference to `cvReleaseMat' /tmp/ccLJWE0c.o: In function
  `cvSubS': opencv.c:(.text+0xd21): undefined reference to `cvAddS'
  /tmp/ccLJWE0c.o: In function `cvCloneSeq': opencv.c:(.text+0xd6f):
  undefined reference to `cvSeqSlice' /tmp/ccLJWE0c.o: In function
  `cvSetNew': opencv.c:(.text+0xdce): undefined reference to `cvSetAdd'
  /tmp/ccLJWE0c.o: In function `cvGetSetElem': opencv.c:(.text+0xe61):
  undefined reference to `cvGetSeqElem' /tmp/ccLJWE0c.o: In function
  `cvEllipseBox': opencv.c:(.text+0xf61): undefined reference to
  `cvEllipse' /tmp/ccLJWE0c.o: In function `cvFont':
  opencv.c:(.text+0xfb1): undefined reference to `cvInitFont'
  /tmp/ccLJWE0c.o: In function `cvReadIntByName':
  opencv.c:(.text+0x103f): undefined reference to `cvGetFileNodeByName'
  /tmp/ccLJWE0c.o: In function `cvReadRealByName':
  opencv.c:(.text+0x10d0): undefined reference to `cvGetFileNodeByName'
  /tmp/ccLJWE0c.o: In function `cvReadStringByName':
  opencv.c:(.text+0x112a): undefined reference to `cvGetFileNodeByName'
  /tmp/ccLJWE0c.o: In function `cvReadByName': opencv.c:(.text+0x115a):
  undefined reference to `cvGetFileNodeByName' opencv.c:(.text+0x1170):
  undefined reference to `cvRead' /tmp/ccLJWE0c.o: In function
  `cvCreateSubdivDelaunay2D': opencv.c:(.text+0x11a3): undefined
  reference to `cvCreateSubdiv2D' opencv.c:(.text+0x11cd): undefined
  reference to `cvInitSubdivDelaunay2D' /tmp/ccLJWE0c.o: In function
  `cvContourPerimeter': opencv.c:(.text+0x1307): undefined reference to
  `cvArcLength' /tmp/ccLJWE0c.o: In function `cvCalcHist':
  opencv.c:(.text+0x132f): undefined reference to `cvCalcArrHist'
  /tmp/ccLJWE0c.o: In function `main': opencv.c:(.text+0x14cd):
  undefined reference to `cvCreateImage' opencv.c:(.text+0x1510):
  undefined reference to `cvGet2D' opencv.c:(.text+0x159e): undefined
  reference to `cvSet2D' opencv.c:(.text+0x15df): undefined reference to
  `cvSaveImage' collect2: error: ld returned 1 exit status
  </code></pre>
  
  <p>Also, when I compile the program using:</p>
  
  <pre><code>gcc opencv.c -o opencv `pkg-config --libs --cflags opencv` -ldl
  </code></pre>
  
  <p>I still get:</p>
  
  <pre><code>/usr/bin/ld: /tmp/ccMRviO3.o: undefined reference to symbol 'lrint@@GLIBC_2.1'
  /usr/bin/ld: note: 'lrint@@GLIBC_2.1' is defined in DSO /lib/libm.so.6 so try adding it to the linker command line
  /lib/libm.so.6: could not read symbols: Invalid operation
  collect2: error: ld returned 1 exit status
  </code></pre>
  
  <p>I've been trying to find a solution, but nothing seems to fix the problem. In the OpenCV Documentation, they mention a different way of installing the libraries needed, but I don't really understand the steps I have to follow. I thought that Fedora devel Packages where compiled and ready to use. Anyway, if this is the problem, is there an easy way to make the whole thing work?</p>
  
  <p>I've been coding in Visual Basic for 6 years now, but I've just started learning C as part of my University Education; thus I am not very experienced in manipulating GCC. :( I would ask you to be as explanatory as possible! :)</p>
  
  <p>Any help is appreciated! Thanks in Advance!!! :D</p>