C++ Wie Library in Eclipse richtig einbinden?

BORG316

Ensign
Registriert
Mai 2003
Beiträge
232
Hallo @all,

ich hänge den ganzen Tag schon an einem Problem.

Ich möchte mich wieder mehr mit C++ beschäftigen und möchte dazu Eclipse CDT und Windows 10 verwenden.
Compiler Installaton und Eclipse Installation war schnell erledig. Das erste "Hello World"-Program usw. hat auch noch super geklappt aber dann...

Ich dachte ich mach ein bisschen was mit OpenCV und hab mir ein Tutorial aus den Netz genommen und wollte es nachprogrammieren. Also OpenCV runtergeladen und installiert. Kurz 20 Zeilen Code c&p in Eclipse rein und dann fingen die Probleme an. Ich musste die Libraries einbinden und da hänge ich jetzt 8 Stunden dran und es funktioniert einfach nicht... Ewig im Netz gesucht, Tutorials gelesen, Youtube-Videos geschaut und jetzt geb ich auf :(

Hier mal der Code:
#include <opencv\cv.h>
#include <opencv\highgui.h>

using namespace cv;

int main(){

Mat image;

VideoCapture cap;
cap.open(0);

namedWindow("window",1);

while(1){
cap>>image;
imshow("window",image);
waitKey(33);
}
return 0;
}



Ich hoffe einer von euch kann mir helfen... Unter den Project-Properties hab ich das Include-Verzeichnis richtig eingetragen (glaube ich) unter MinGW C++ Linker > Libraries > Library search path (-L) hab ich "C:\opencv249\build\x86\vc10\lib" eingetragen und unter MinGW C++ Linker > Libraries > Libraries (-l) hab ich sämtliche benötigten Libraries eingetragen (ohne Dateiendung) also zB. "opencv_core249d.lib" steht da nur mit "opencv_core249d" drin. Wenn ich jetzt das Project builde bekomme ich die folgende Fehlermedlung:

02:21:10 **** Incremental Build of configuration Debug for project myNewOpenCV ****
Info: Internal Builder is used for build
g++ "-LC:\\opencv249\\build\\x86\\vc10\\lib" -o myNewOpenCV.exe main.o -lopencv_core249d -lopencv_calib3d249d -lopencv_imgproc249d -lopencv_highgui249d -lopencv_ml249d -lopencv_video249d
main.o: In function `main':
C:\Users\Smajo\workspace\myNewOpenCV\Debug/../main.cpp:12: undefined reference to `cv::VideoCapture::VideoCapture()'
C:\Users\Smajo\workspace\myNewOpenCV\Debug/../main.cpp:13: undefined reference to `cv::VideoCapture::open(int)'
C:\Users\Smajo\workspace\myNewOpenCV\Debug/../main.cpp:16: undefined reference to `cv::namedWindow(std::string const&, int)'
C:\Users\Smajo\workspace\myNewOpenCV\Debug/../main.cpp:20: undefined reference to `cv::VideoCapture::operator>>(cv::Mat&)'
C:\Users\Smajo\workspace\myNewOpenCV\Debug/../main.cpp:23: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
C:\Users\Smajo\workspace\myNewOpenCV\Debug/../main.cpp:23: undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
C:\Users\Smajo\workspace\myNewOpenCV\Debug/../main.cpp:26: undefined reference to `cv::waitKey(int)'
C:\Users\Smajo\workspace\myNewOpenCV\Debug/../main.cpp:12: undefined reference to `cv::VideoCapture::~VideoCapture()'
main.o: In function `ZN2cv3MatD1Ev':
C:/opencv249/build/include/opencv2/core/mat.hpp:278: undefined reference to `cv::fastFree(void*)'
main.o: In function `ZN2cv3Mat7releaseEv':
C:/opencv249/build/include/opencv2/core/mat.hpp:367: undefined reference to `cv::Mat::deallocate()'
collect2.exe: error: ld returned 1 exit status


So wie ich das verstehe findet der Compiler die Funktionen nicht. Eclipse zeigt auch keine Beschreibung zu den Funktionen an -> zB. "undefined reference to `cv::VideoCapture::open(int)".

Wenn ich jetzt aber unter MinGW C++ Linker > Libraries > Libraries (-l) sämtliche benötigten Libraries mit Dateiendung eintrage findet der Eclipseditor anscheinend die Funktionen da er mir auch eine Beschreibung dafür ausgibt. Aber wenn ich jetzt das Project builde bekomme ich folgende Fehlermeldung:

02:34:07 **** Incremental Build of configuration Debug for project myNewOpenCV ****
Info: Internal Builder is used for build
g++ "-LC:\\opencv249\\build\\x86\\vc10\\lib" -o myNewOpenCV.exe main.o -lopencv_core249d.lib -lopencv_calib3d249d.lib -lopencv_imgproc249d.lib -lopencv_highgui249d.lib -lopencv_ml249d.lib -lopencv_video249d.lib
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core249d.lib
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_calib3d249d.lib
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_imgproc249d.lib
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui249d.lib
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_ml249d.lib
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lopencv_video249d.lib
collect2.exe: error: ld returned 1 exit status

02:34:07 Build Finished (took 128ms)


Wie kann das sein? Die Dateien sind da! Ich werd noch verrückt... Beim einen findet Eclipse nicht die Funktionen und beim anderen nicht die Dateien?!? Was mache ich falsch?

Thx und gute Nacht
 
ehrlich gesagt würde ich für c++ nicht eclipse verwenden ..
such dir was besseres
 
Mich macht dieser Ordner stutzig -> C:\opencv249\build\x86\vc10

Dieser Ordner denke ich beinhaltet die Libs des Visual Studio Compiler Version 10, welcher soweit ich es weiss nicht Lib Compatible zu MinGW ist.
 
Kannst mal versuchen OpenCV mit CMake, MinGW und Eclipse zu bauen.

Hier eine kurze Anleitung.

1. Zeug herunterladen:

2. Wenn MinGW richtig eingestellt ist (die build tools installiert sind und C:\MinGW\bin zu der "Path" Umgebungsvariable hinzugefügt wurde), dann kannst du mit CMake ein make Projekt konfigurieren und dieses mittels Eclipse bauen.

3. Verwenden von CMake:
  1. Nachdem das Archiv entpackt wurde -> <...>/bin/cmake-gui.exe ausführen
  2. Bei "Specify the generator for this project" -> Eclipse CDT4 - MinGW Makefiles auswählen und auf OK klicken
  3. Bei "Where is the source code" -> C:/Users/<...>/opencv-3.1.0/opencv/sources auswählen
  4. Bei "Where to build the binaries" -> C:/Users/<...>/opencv-3.1.0/opencv/build auswählen
  5. Unten links auf "Configure" klicken und warten
  6. Abschließend auf "Generate" klicken

4. Jetzt kannst du das generierte OpenCV Projekt in Eclipse importieren und compilieren
  1. Ein neues workspace mit Eclipse erstellen und öffnen
  2. Auf File -> Import gehen und aus der Liste General -> Existing Project into Workspace auswählen
  3. Den Ordner C:/Users/<...>/opencv-3.1.0/opencv/build bei "select root directory" auswählen und auf finish klicken

5. Um die OpenCV libs zu kompilieren musst du nur noch auf OpenCV-Release@build rechst klicken und Build Project auswählen

Entwicklungsumgebung konfigurieren:

So sollten deine includes und libs gesetzt sein:

Project -> Properties -> C/C++ Build -> Settings -> Rechts unter Tool Settings auf C++ Compiler -> includes gehen und im oberen Fenster "include paths (-I)" die OpenCV includes einfügen "C:/Users/<...>/opencv-3.1.0/opencv/build/include"

Jetzt wechselst du von C++ Compiler -> includes auf MinGW C++ Linker (ist unten drunter zu finden) und fügst im unteren Fenster "Library search Path (-L)" die OpenCV libs hinzu "C:/Users/<...>/opencv-3.1.0/opencv/build/lib" und in dem Fenster oben drüber "Libraries (-l)" die libs die du verwenden möchtest z.B. opencv_core310, opencv_imgproc310, opencv_highgui310, opencv_imgcodecs310.

Jetzt solltest du in der Lage sein dein Projekt zu kompilieren.
 
Als Ergänzung zu Mr. Smith: Visual Studio gibt es mittlerweile in der kostenlosen Community Edition. Bin ich soweit ganz happy mit, und musste mich da auch um nix kümmern. Der Kram wurde installiert und alles lief.

Ansonsten finde ich für das ganz dumpfe Rumprobieren und kleine Projekte, die keine komplette Entwicklungsumgebung brauchen, Linux immer noch am Besten. Texteditior + g++ und es läuft einfach. Vor allem sind Compiler & co. bei fast jedem Linux vorinstalliert, direkt im PATH etc. Unter Windows ist das immer ein Krampf, einfach nur einen Compiler ohne VS oder sonstwas zu bekommen...
 
Zuletzt bearbeitet:
Wenn C(++) unter Windows, dann würde ich auch zu VisualStudio raten.
Ansonsten gibts da glaube auch noch was von IDEA, aber würde schon VS bevorzugen :daumen:
 
Fang vllt. erstmal kleiner an, statt direkt irgendeine komplizierte Library zu verwenden. Wenn dir das mit den Includes, Libraries, Header Files etc nicht klar ist wirst alles frustrierend finden im weiteren. Es gibt auch Online C++ Shells die zum live Rumprobieren ganz gut sind.
 
Zuletzt bearbeitet:
bis c++ oder gc++ auf mac windows mit eclipse laufen …

visual studio ist auf jeden fall ne idee, aber find ich auch nicht optimal wenn man nur kleinere dinge machen will.
 
Liegt es vielleicht an den doppelten Backslashes \\ im -L Suchpfad? Sieht für mich so aus als würde Eclipse versuchen, die Backslashes zu escapen und der Compiler kommt damit nicht klar. Die Pfade in den Fehlerausschriften wechseln auch fröhlich zwischen Slash und Backslash hin und her was aber allen Anschein nach problemlos funktioniert. Stell den -L Pfad von Backslash auf Slash um und guck ob sich was ändert. Die Fehlermeldungen bedeuten jedenfalls, dass -l Libs nicht im Suchpfad gefunden werden.
 
1. fhtagn hat wahrscheinlich das Problem erkannt. Nutze nur Linux+Eclipse, aber das sieht komisch aus.

2. Mein Tip: wenn es in Eclipse nicht läuft kopier den Befehl "g++ ..." ins Terminal. Bringt höchstwahrscheinlich nichts, aber nun kannst du schneller ausprobieren (->1.!!!) Wenn es jetzt nicht läuft sind meistens die Pfade falsch, Bibliotheken fehlen oder in seltenen Fällen in der falschen Reihenfolge.

3. Versuche kleiner anzufangen: erst nur die Includes, dann die Bibliotheken linken und erst dann Funktionen aus den Bibliotheken auch nutzen. Dann kriegst du mehr Ahnung, wo der Fehler liegt.

4. Inkrementeller Build bringt bei dem 1-File Projekt gar nichts, kostet aber möglicherweise auch nichts.
 
Zurück
Oben