Hot to use ML OpenCV

Gast #3890867
Lesenswert?

Hallo Zusammen,

ich versuche gerade ein Projekt zu compilieren, wo ich gerne mit OpenCV 
ein Beispiel für Maschinelles Lernen ausprobieren möchte.

Es kommen bei Compilieren folgende Fehlermeldungen:


**** Build of configuration Debug for project KNN ****

**** Internal Builder is used for build               ****
g++ -LC:\opencv\build\x86\vc12\lib -oKNN.exe src\KNN.o 
-lopencv_legacy2410 -lopencv_ts2410 -lopencv_core2410 
-lopencv_highgui2410 -lopencv_imgproc2410 -lopencv_ml2410
src\KNN.o: In function `main':
C:\Wascana\C++\KNN\Debug/../src/KNN.cpp:51: undefined reference to 
`CvANN_MLP::CvANN_MLP()'
C:\Wascana\C++\KNN\Debug/../src/KNN.cpp:52: undefined reference to 
`CvANN_MLP_TrainParams::CvANN_MLP_TrainParams()'
C:\Wascana\C++\KNN\Debug/../src/KNN.cpp:63: undefined reference to 
`CvANN_MLP::create(CvMat const*, int, double, double)'
C:\Wascana\C++\KNN\Debug/../src/KNN.cpp:65: undefined reference to 
`CvANN_MLP_TrainParams::~CvANN_MLP_TrainParams()'
C:\Wascana\C++\KNN\Debug/../src/KNN.cpp:65: undefined reference to 
`CvANN_MLP_TrainParams::~CvANN_MLP_TrainParams()'
C:\Wascana\C++\KNN\Debug/../src/KNN.cpp:65: undefined reference to 
`CvANN_MLP::~CvANN_MLP()'
C:\Wascana\C++\KNN\Debug/../src/KNN.cpp:65: undefined reference to 
`CvANN_MLP::~CvANN_MLP()'
collect2: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 877  ms.

Header Dateien habe ich includet und LIB path in Eclipse hinzugefügt.
Trotztdem geht nicht.

Hat jemand eine Idee, was ich noch da machen muss?

Danke und Grüße
#3890933
Lesenswert?

Includen ist nur für den Compiler, nicht für den Linker.
Die Fehlermeldung kommt aber vomn Linker, der Compiler ist da schon 
durch.

Der Lib-Path sagt dem Linker, wo er nach Libs suchen soll.
Du musst ihm auch noch sagen, welche Lib er nehmen soll (die er dann im 
Libpath sucht).
Welche das ist, weiß ich nicht - wird wohl mit lib... anfangen und 
irgendwas mit CV heißen.
Wie man die angibt (wenn du weisst, welche es sit), hängt davon ab, mit 
welcher Umgebung du arbeitest.
Gast #3890957
Lesenswert?

Deine für deine Antwort, aber hat nicht wirklich viel geholfen.
Die libs habe ich auch im Projekt hinzugefügt. Für dieses Beispiel wäre 
dann wihctig opencv_ml2410

-lopencv_legacy2410 -lopencv_ts2410 -lopencv_core2410
-lopencv_highgui2410 -lopencv_imgproc2410 -lopencv_ml2410
#3891465
Lesenswert?

Ich weiß nicht, mit welcher Umgebung du arbeitest - das macht die Suche 
von außen schwieriger.
Den Pfadnamen nach ist es Windows, aus -l... schließe ich etwas 
gcc-mäßiges?

Da gibt es in der Toolchain vermutlich ein Kommando nm, mit dem man zu 
einer Lib die darin enthaltenen exportierten Symbole anzeigen lassen 
kann (neben vielem anderen).
Damit könntest du mal schauen, ob in den Libs, die du angibst, überhaupt 
die Symbole sind, die der Linker anmeckert.

Bei Visual Studio gab es mal ein dumpbin.exe, das etwas ähnliches macht. 
Bin mir aber nicht sicher, ob das beim VS dabei war oder in irgendeinem 
Resourcekit.
#3891594
Lesenswert?

Open schrieb:
> Deine für deine Antwort, aber hat nicht wirklich viel geholfen.
> Die libs habe ich auch im Projekt hinzugefügt. Für dieses Beispiel wäre
> dann wihctig opencv_ml2410
>
> -lopencv_legacy2410 -lopencv_ts2410 -lopencv_core2410
> -lopencv_highgui2410 -lopencv_imgproc2410 -lopencv_ml2410

LD braucht die Libs in der richtigen Reihenfolge: die "Abhängigen" gehen 
immer vor. Probier z.B. mal opencv_core2410 hinter opencv_ml2410 zu 
stellen (davon aus gehend, dass ml vom core abhängt).
(Alle Angaben ohne Gewähr ;-))
Gast #3892560
Lesenswert?

Klaus Wachtler schrieb:
> Ich weiß nicht, mit welcher Umgebung du arbeitest - das macht die
> Suche
> von außen schwieriger.
> Den Pfadnamen nach ist es Windows, aus -l... schließe ich etwas
> gcc-mäßiges?
>
> Da gibt es in der Toolchain vermutlich ein Kommando nm, mit dem man zu
> einer Lib die darin enthaltenen exportierten Symbole anzeigen lassen
> kann (neben vielem anderen).
> Damit könntest du mal schauen, ob in den Libs, die du angibst, überhaupt
> die Symbole sind, die der Linker anmeckert.
>
> Bei Visual Studio gab es mal ein dumpbin.exe, das etwas ähnliches macht.
> Bin mir aber nicht sicher, ob das beim VS dabei war oder in irgendeinem
> Resourcekit.


opencv_ml2410.dll:
00000000 I .idata$4
00000000 I .idata$5
00000000 I .idata$6
00000000 T .text
00000000 T ??0CvANN_MLP@@QAE@ABV0@@Z
         U __IMPORT_DESCRIPTOR_opencv_ml2410
00000000 I _imp??0CvANN_MLP@@QAE@ABV0@@Z

opencv_ml2410.dll:
00000000 I .idata$4
00000000 I .idata$5
00000000 I .idata$6
00000000 T .text
00000000 T ??0CvANN_MLP@@QAE@ABVMat@cv@@HNN@Z
         U __IMPORT_DESCRIPTOR_opencv_ml2410
00000000 I _imp??0CvANN_MLP@@QAE@ABVMat@cv@@HNN@Z

opencv_ml2410.dll:
00000000 I .idata$4
00000000 I .idata$5
00000000 I .idata$6
00000000 T .text
00000000 T ??0CvANN_MLP@@QAE@PBUCvMat@@HNN@Z
         U __IMPORT_DESCRIPTOR_opencv_ml2410
00000000 I _imp??0CvANN_MLP@@QAE@PBUCvMat@@HNN@Z

opencv_ml2410.dll:
00000000 I .idata$4
00000000 I .idata$5
00000000 I .idata$6
00000000 T .text
00000000 T ??0CvANN_MLP@@QAE@XZ
         U __IMPORT_DESCRIPTOR_opencv_ml2410
00000000 I _imp??0CvANN_MLP@@QAE@XZ

opencv_ml2410.dll:
00000000 I .idata$4
00000000 I .idata$5
00000000 I .idata$6
00000000 T .text
00000000 T ??0CvANN_MLP_TrainParams@@QAE@UCvTermCriteria@@HNN@Z
         U __IMPORT_DESCRIPTOR_opencv_ml2410
00000000 I _imp??0CvANN_MLP_TrainParams@@QAE@UCvTermCriteria@@HNN@Z

opencv_ml2410.dll:
00000000 I .idata$4
00000000 I .idata$5
00000000 I .idata$6
00000000 T .text
00000000 T ??0CvANN_MLP_TrainParams@@QAE@XZ
         U __IMPORT_DESCRIPTOR_opencv_ml2410
00000000 I _imp??0CvANN_MLP_TrainParams@@QAE@XZ



Symbols sind vorhanden, dazwischen aber Sonderzeichen. Ist es in 
Ordnung?
#3893145
Lesenswert?

Ja, in den Namen sind ja auch die Signaturen mit versteckt (name 
mangling).

Wenn die Namen also in den Libs definiert und exportiert sind (die mit T 
markierten sind die exportierten Funktionen, U sind die in dieser Lib 
undefinierten, aber vom Linker durch andere Libs aufzulösenden Namen), 
dann wird es an der Reihenfolge der Libs liegen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren