[gelöst] undefined reference to



  • Moin,

    Ich möchte mich nun mit der Verwendung der OpenCV Library beschäftigen. Zu diesem Zweck habe ich mir das Buch: "Learning OpenCV: Computer Vision with the OpenCV Library" Von O'Reilly gekauft.

    Ich konnte wie im Buch beschrieben alles unter Linux (Kubuntu 10.10) installieren. Nachdem ich meinen ersten Quellcode kompilieren wollte, gab mein Compiler (g++) folgende Meldungen aus:

    /tmp/ccXMRu5f.o: In function `main':
    test.cpp:(.text+0x1d): undefined reference to `cvLoadImage'
    test.cpp:(.text+0x35): undefined reference to `cvNamedWindow'
    test.cpp:(.text+0x49): undefined reference to `cvShowImage'
    test.cpp:(.text+0x55): undefined reference to `cvWaitKey'
    test.cpp:(.text+0x61): undefined reference to `cvReleaseImage'
    test.cpp:(.text+0x6d): undefined reference to `cvDestroyWindow'
    collect2: ld returned 1 exit status
    

    Leider kann ich mit diesen Fehlermeldungen nichts anfangen. Es scheint mir so, als ob das etwas mit meinem gesammten System zu tun hat, und dass es kein Fehler im Quellcode ist. 😕 😕

    Könnt ihr mir bitte weiterhelfen?

    P.S. Guten Rutsch ins neue Jahr!

    Vielen Dank
    Greez Tectu


  • Mod

    Da hast du wohl die nötige Bibliothek nicht mit gelinkt. Wie genau rufst du den Compiler/Linker denn auf, bzw. welche IDE benutzt du?



  • Hallo SeppJ,

    Ich nutze als IDE ganz einfach Geany 😉
    Also das ist nicht direkt eine IDE. Am liebsten mache ich das immer manuell mit der konsole (geany macht ja auch nichts anderes)

    g++ test.cpp -o test
    

    Ich denke mal, dass dies in diesem Falle falsch ist?

    Greez Tectu



  • Unvollstaendig trifft es besser. Du musst die OpenCV-Bibliothek installieren und dann mittels der Option -lopencv (oder so) dazulinken



  • Ich musste feststellen, dass ich in /usr/local/lib nichts drin habe, was sich opencv* nennt. Ein Selbsttest des OpenCVs sagte jedoch, dass alle Komponenten installiert sind, und diese auch funkionieren. Ich konnte auch die Beispielprogramme, die zu OpenCV mitgeliefert wurden, ohne Probleme testen.

    Weitere Ideen?

    Greez Tectu


  • Mod

    Tectu schrieb:

    Ich musste feststellen, dass ich in /usr/local/lib nichts drin habe, was sich opencv* nennt.

    Und? Wieso sollten sie dort sein und so heißen? Guck mal in a) in /usr/lib und b) nach libopencv*

    Ein Selbsttest des OpenCVs sagte jedoch, dass alle Komponenten installiert sind, und diese auch funkionieren. Ich konnte auch die Beispielprogramme, die zu OpenCV mitgeliefert wurden, ohne Probleme testen.

    Und wie hast du sie getestet?

    Weitere Ideen?

    Hast du denn gemacht, was knivil gesagt hat? Das ist die Lösung.



  • Und wie hast du sie getestet?

    Zu der Librarygab es ein ordner "samples", wo ein bashscript drin war, dass alle quellcodes kompiliert hat. Anschliessend hatte man ausführbare Dateien, die dann auch funktionierten (z.B. Facetracking) 😉

    Hast du denn gemacht, was knivil gesagt hat? Das ist die Lösung.

    Wenn ich es genau so mache, wie er es beschreibt, siehts dann so aus:

    tectu@Tectu-Workstation:~/programming/opencv$ g++ -o test -lopencv ch2_ex2_1.cpp
    /usr/bin/ld: cannot find -lopencv
    collect2: ld returned 1 exit status
    

    Ich habe mal das oben benannte bashscript angeschaut:

    if [ $# -gt 0 ] ; then
    	base=`basename $1 .c`
    	echo "compiling $base"
    	gcc -ggdb `pkg-config opencv --cflags --libs` $base.c -o $base 
    else
    	for i in *.c; do
    	    echo "compiling $i"
    	    gcc -ggdb `pkg-config --cflags opencv` -o `basename $i .c` $i `pkg-config --libs opencv`;
    	done
    	for i in *.cpp; do
    	    echo "compiling $i"
    	    g++ -ggdb `pkg-config --cflags opencv` -o `basename $i .cpp` $i `pkg-config --libs opencv`;
    	done
    fi
    

    Also habe ich mal vorgendes getestet:

    tectu@Tectu-Workstation:~/programming/opencv$ g++ `pkg-config --cflags opencv` -o test `pkg-config --libs opencv` 
    /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o: In function `_start':
    (.text+0x20): undefined reference to `main'
    collect2: ld returned 1 exit status
    tectu@Tectu-Workstation:~/programming/opencv$
    

    Schon komisch... der selbe Befehl konnte ja auch die examples kompilieren, und jetzt ist auf einmal /opt/include/opencv nicht vorhanden? Also bin ich mal in das genannte Verzeichnis gegangen und konnte feststellen, dass da tatsächlich ein Ordner "opencv" und einer "opencv2" ist...

    Ich weiss nicht mehr weiter....

    Greez Tectu



  • Okay, ich habs jetzt hinbekommen:

    g++ `pkg-config --cflags opencv` -o test `pkg-config --libs opencv` ch2_ex2_1.cpp
    

    Hab im obrigen Beipsiel das Input-File vergessen.

    Vielen Dank für euere Hilfe!

    Greez Tectu


Anmelden zum Antworten