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
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.
:
Bearbeitet durch User
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
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.
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 ;-))
:
Bearbeitet durch User
Das kann ich ausprobieren. Kann sein, dass ich alle libs neu erstellen muss? Ich nutze im Projekt schon fertige libs, die im download für Windows vorhanden sind.
Ich habe einen Windows Rechner und versuche das Ganze mit Eclispe/MinGW/g++ zu erstellen.
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?
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.
Eric B. schrieb: > LD braucht die Libs in der richtigen Reihenfolge: die "Abhängigen" gehen > immer vor. Das stimmt nicht. Die Reihenfolge hat nur Einfluss, wenn Symbole in mehreren libs auftauchen. Dann nimmt er die erste gefundene Definition.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.