OpenCV unter Linux linken



  • Hallo, ich habe leider ein paar Probleme damit OpenCV unter Ubuntu zum Laufen zu bekommen. Habe OpenCV wie hier beschrieben installiert. Würde nun gerne folgenden Quelltext zum Laufen bekommen:

    #include <opencv2/opencv.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc_c.h>
    
    int main () {
    	cv :: VideoCapture cam = cv :: VideoCapture (0);
    	cv :: Mat frame ;
    	cv :: namedWindow (" Demo ");
    	int key = -1;
    	while (1) {
    		cam >> frame;
    		cv::medianBlur(frame,frame,15);
    		imshow (" Demo ", frame );
    		key = cv :: waitKey (50);
    		if (key ==113) break;
    	}
    	cam.release ();
    	return 0;
    }
    

    Von der Syntax her klappt alles, nur der Linker meckert. Habe deswegen folgende Libraries zum Linken angegeben:
    Path: /usr/local/lib
    Libraries:
    opencv_core, opencv_video, opencv_highgui

    Allerdings meckert der Linker immer noch:

    ./main.o: undefined reference to symbol '_ZN2cv10medianBlurERKNS_11_InputArrayERKNS_12_OutputArrayEi'	OpenCVTest		 	C/C++ Problem
    

    Mittlerweile wollte ich opencv mal deinstallieren anhand des Befehls "sudo make uninstall". Laut CommandLine hats auch geklappt, aber offenbar wurde kaum was gelöscht. Einerseits finde ich immer noch massenhaft opencv-Dateien per find, und andererseits zeigt mir der Linker immer noch denselben Fehler.

    Grüße



  • Laß mal

    pkg-config opencv --libs
    

    in der Konsole laufen - das gibt dir dann eine Liste der benötigten Libs, s.a.
    Linking OpenCV libraries with Eclipse Ubuntu
    Compiling and Linking OpenCV in Ubuntu 12.04
    linking opencv libraries with g++
    (wie du siehst ist StackOverflow immer eine gute erste Wahl für solche Fragen, da weltweit mehr Leute in englischen Foren posten).

    Aber eigentlich sollte dieser Befehl dann auch eingebettet im makefile drin sein.

    Oder kompilierst und linkst du mittels g++ direkt von Hand?

    PS: Analog für die C++ Flags gibt es

    pkg-config opencv --cflags
    


  • Danke für die schnelle Antwort! Ja, StackOverflow wäre wohl für diese Thematik besser gewesen.
    Bei diesem Programm hat das gut funktioniert, nur bei meinem leider immer noch nicht.

    ich@hier:~/Programmieren/OpenCV Programme/test1$ gcc -ggdb `pkg-config --cflags opencv` -o `basename main.cpp .cpp` main.cpp `pkg-config --libs opencv`
    /usr/bin/ld: /tmp/ccLJJdvx.o: undefined reference to symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
    //usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status
    


  • Ich vermute ja, dass das ein Versionskonflikt ist. Habe 3.0 installiert, bräuchte aber eigentlich 2.3 bzw. irgendeine 2er Version... Hat jemand ne Idee, wie ich das wieder deinstallieren kann?



  • Wahnsinn, es funktioniert! Hatte ausversehen den Befehl zum Kompillieren für C-Programme eingegeben. Fettes Danke, das hätte ich so nicht hinbekommen 🙂


Log in to reply