Kdevelop findet open CV headerfiles nicht

I

Id3fix

Grünschnabel
Hallo,

Versuche auf Kdevelop umzusteigen. "Hello World" klappt auch.
habe open CV heruntergeladen und kompiliert. Die headerfiles liegen auch in
/usr/local/include/opencv2/

wenn ich ein sample file z.b. drawing.cpp kompilieren wird im Quelltext inkludiert:

Code:
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdio.h>
using namespace cv;

und dann gibt es den Fehler :
undefined reference to `cv::Mat::zeros(int, int, int)'

Wieso findet er die headerfiles nicht?
 
Er findet die Header-Dateien, aber die Library dazu nicht. Ist der Pfad, in dem sich die zugehörige .so-Datei befindet im Library-Path? Wird -lopencv_core als Compiler-Parameter genutzt?
 
Wie kann ich das überprüfen (sorry für meine Unwissenheit....)
 
Schau in den Projekt-Einstellungen nach. Dort müsste als Compiler-Flag -L/pfad/zur/opencv/lib sowie -lopencv_core verwendet werden.
 
Schau in den Projekt-Einstellungen nach. Dort müsste als Compiler-Flag -L/pfad/zur/opencv/lib sowie -lopencv_core verwendet werden.
Eigentlich ist das ein Linker-Flag, kein Compiler-Flag. Die IDEs, die ich benutze, unterschreiden das,;ich vermute, KDevelop auch.
 
Also ich klicke rechts auf Projekt ==> Einstellungen öffnen
und dort finde ich nirgens die Möglichkeit Compiler bzw. Linker-Flags zu setzen....
 
Wenn ich das im Web richtig sehe (ich nutze KDevelop schon seit Version 2 nicht mehr), geht das mittlerweile über Umgebungsvariablen wie CXXFLAGS. Diese kann man wohl in Project->Project Option->Build Option->Make setzen.
 
Welche Entwicklungsumgebung würdest Du mir denn empfehlen?
 
Einen einfachen Editor, wenn du noch am Lernen bist, damit du auch mitbekommst wie die Compiler-Befehle zustande kommen, wie Makefiles funktionieren u.ä.. Das ist zwar etwas mehr Aufwand, den eine IDE einem halt abnimmt, aber zum Verständnis der Programmierung imo der richtige Weg. Denn im Normalfall kann man auch bei IDEs im schlimmsten Fall einfach die Automake-Informationen direkt in den Projekt-Dateien bearbeiten, wenn mal keine passende Einstellung existiert oder man sie einfach nicht findet.

Code::Blocks wird auch immer wieder hoch gelobt. Ich selbst bevorzuge für kleinere Projekte zumeist Emacs, aber der ist sehr gewöhnungsbedürftig. Für grössere Projekte verwende ich NetBeans.

Empfehlen würde ich dennoch keine, denn es ist reine Geschmackssache. Jeder hat andere Ansprüche an eine IDE. Der eine will unbedingt alles mit Shortcuts bedienen können, der andere will lieber möglichst viel am Projekt via Kontext-Menüs usw. ändern können. Wieder der nächste ist vom Auto-Complete genervt, während andere nicht darauf verzichten wollen. Probiere einfach mal verschiedene aus und arbeite dich dann in die ein, die dir am ehesten zusagt.
 
ok, klingt einleuchtend.
Dazu müsste ich das aber dennoch mal in der Konsole zum Laufen bringen...
Code:
g++ drawing.cpp -I/usr/local/lib -include/usr/local/lib/libopencv_core.so -include/usr/local/lib/libopencv_highgui.so

läuft und läuft und schmeißt nur Fehler ala:
Code:
/usr/local/lib/libopencv_core.so:115:402: warning: null character(s) preserved in literal [enabled by default]
/usr/local/lib/libopencv_core.so:115:427: warning: null character(s) ignored [enabled by default]
/usr/local/lib/libopencv_core.so:115:6: error: stray ‘\300’ in program
/usr/local/lib/libopencv_core.so:115:6: error: stray ‘\34’ in program
/usr/local/lib/libopencv_core.so:115:433: warning: null character(s) ignored [enabled by default]
/usr/local/lib/libopencv_core.so:115:439: warning: null character(s) ignored [enabled by default]

hatt er mit dem Flag jetzt nicht die benötigten lib?
 
Offenbar hat er die benötigte Bibliothek jetzt, aber in dieser werden Fehler ausgelöst. Erfahrungsgemäss ist dafür zumeist ursächlich der erste Fehler, der ausgelöst wird. Der Rest sind dann oft Folgefehler, die durch diesen verursacht werden.

Aufgrund der Meldung "error: stray ‘\300’ in program" würde ich aber darauf tippen, dass sich da irgendwelche unsichtbaren oder falsch codierten Zeichen in deine Source-Datei eingeschlichen haben (schräge Anführungszeichen anstelle normaler u.ä.) oder dass die $LANG-Einstellung des Terminals falsch sind. Stell mal sicher, dass deine LC_*-Umgebungsvariablen und $LANG auf den Wert POSIX gesetzt sind. Ausserdem sollte ein 'file --mime-encoding /deine/source/datei' anzeigen, dass die Datei in "us-ascii" vorliegt. Ist dies nicht der Fall, dann ändere dies.
 
Code:
file --mime-encoding drawing.cpp
liefert

Code:
drawing.cpp: us-ascii

und

Code:
locale -a

liefert

Code:
C
C.UTF-8
de_AT.utf8
de_BE.utf8
de_CH.utf8
de_DE.utf8
de_LI.utf8
de_LU.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX

müsste passen, oder?
 
Welche locales installiert sind, ist dafür irrelevant. Wichtig sind die Spracheinstellungen des Terminals, die du mit 'printenv' einsehen kannst, da sie mittels Umgebungsvariablen gesetzt werden.
 
so?
Code:
printenv | grep LANG
LANG=de_DE.UTF-8
GDM_LANG=de_DE
LANGUAGE=de_DE
 
Setze $LANG auf den Wert "C" und gleichermaßen $LC_ALL.
 
nein, nein, nein!!! Der Fehler liegt daran, dass der Compiler (!) die Bibliothek als Quellcode interpretiert, was natuerlich zu diesen Fehlermeldungen fuehrt. Du bindest die Bibliotheken ('.so') mittels '-lopencv_core' ein! -l ist die Option und opencv_core der Name der Bibliothek. Da sie sich in /usr/local/lib befindet, sollte der Linker, den der Compiler g++ automatisch aufruft, sie dort auch standardmaessig finden. Ist das nicht der Fall, kannst Du vor '-lopencv_core' noch ein '-L /usr/local/lib' eingeben.

Als IDE fuer C++ gefaellt mir netbeans, aber eclipse ist auch nicht schlecht. Ich finde beide, zumindest fuer meine Beduerfnisse, recht aehnlich, und andere habe ich noch nicht ausprobiert. Aber wie bitmuncher gesagt hat, ist das v.a. Geschmacksache.
 
nein, nein, nein!!! Der Fehler liegt daran, dass der Compiler (!) die Bibliothek als Quellcode interpretiert, was natuerlich zu diesen Fehlermeldungen fuehrt.

Du hast absolut Recht. Ich war wohl zu sehr auf die Fehlermeldung und zu wenig auf die verwendeten Parameter fixiert. :/
 

Ähnliche Themen

Xubuntu - AVR32-linux crosscompile sqlite

Kdevekop header undefinied reference

kompilier problem

Superkaramba @ Debian FEHLER????

CGI laesst sich nicht ausfuehren

Zurück
Oben