Installieren Sie OpenCV und kompilieren Sie das C-Programm mit GCC

Als Teil eines größeren Projekts, an dem ich arbeite, muss ich die OpenCV-Bibliothek in einem C-Programm verwenden. Ich habe OpenCV und opencv-devel mit yum in Fedora 17 32-bit installiert. Ich habe den Präprozessor angewiesen, opencv / cv.h und opencv / highgui.h als erforderliche Header-Dateien zu importieren.

Wie bereits erwähnt, wird gcc zum Kompilieren des gesamten C-Projekts verwendet. Es scheint jedoch ein Problem mit dem Linker zu geben.

Wann immer ich versuche, das Projekt zu kompilieren (gcc opencv.c -o opencv) Erhalte ich eine Fehlerliste, ähnlich der folgenden:

/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

Auch wenn ich das Programm kompiliere mit:

gcc opencv.c -o opencv `pkg-config --libs --cflags opencv` -ldl

Ich bekomme noch:

/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

Ich habe versucht, eine Lösung zu finden, aber nichts scheint das Problem zu beheben. In der OpenCV-Dokumentation wird eine andere Art der Installation der benötigten Bibliotheken erwähnt, aber ich verstehe die Schritte, die ich ausführen muss, nicht wirklich. Ich dachte, dass Fedora Pakete entwickelt, die kompiliert und einsatzbereit sind. Wie auch immer, wenn dies das Problem ist, gibt es eine einfache Möglichkeit, das Ganze zum Laufen zu bringen?

Ich programmiere jetzt seit 6 Jahren in Visual Basic, habe aber gerade im Rahmen meiner Universitätsausbildung angefangen, C zu lernen. Daher bin ich nicht sehr erfahren in der Manipulation von GCC. :( Ich würde dich bitten, so erklärend wie möglich zu sein! :)

Jede Hilfe wird geschätzt! Danke im Voraus!!! : D

Antworten auf die Frage(1)

Ihre Antwort auf die Frage