Einstieg: Eigene Bibliothek erstellen
-
Hallo zusammen,
ich habe gerade ein kleines Projekt gestartet, Und zwar habe ich an meinen Raspberry Pi einen Fumkempfänger "gebaut" und fange damit die Temperatur- und Luftfeuchtigkeitswerte in einigen Zimmern in meinem Haus ab.
Das ganze läuft auch, ist allerdings in Python geschrieben und ich würde, um meine Programmierkenntnisse zu erweitern,... das ganze jetzt gerne objektorientiert in C++ umsetzen.
Die (in Java) Entities (wie heißen die in C++?) zu erstellen, eine main-Funktion,.. ist erstmal ja kein Problem.
Ich würde nun jedoch gerne einen eigenen Logger schreiben, den ich dann in verschiedenen Projektchen für meinen Raspberry Pi weiterverwenden kann. Ebenso mal später den Datenbank-Connector,...
So wirklich verstehen, wie man seine eigenen Libraries schreibt, habe ich bisher aber nicht bzw. die Anleitungen die ich gefunden habe, haben wohl weit mehr Fachwissen vorausgesetzt, als ich habe.
Was muss ich denn in Eclipse machen, um eine in einem eigenen Projekt anzulegen und dann auch wieder in einem anderen Projekt einbinden zu können?
Vielen Dank und viele Grüße,
Dirk
-
Hallo und Willkommen im Forum!
Soll jetzt keine ausführliche Anleitung sein, zumal ich mit Raspberry (welches OS?) und Eclipse keine bis wenig Erfahrung habe.
Deshalb eher als Stichwortlsite zu verstehen:
Meistens gibt es bei IDEs vorgefertigte Projekt-Typen für staic- und dynamic link libraries (Ist dir der Unterschied belkannt?) wo dann die entsprechende Datei (.lib,.dll,.so,...) aus den Quellen zusammengebacken wird. Man muss evtl. noch darauf achten, bzw angeben was genau exportiert werden soll.
Um diese dann im Hauptprojekt einzubinden muss dort der Linker-Input entsprechend konfiguriert werden.
Dh. man muss (neben den .h-includes zur compilezeit) eben dem Linker sagen wo er die Lib findet.Als Minimallösung kannst du aber einfach auch sauber die Abhängigkeiten im Code trennen und trotzdem alles im gleichen Projekt lassen.
-
Hallo scrontch,
vielen Dank und vielen Dank für deine Antwort.
Die Schlagworte, die du mir genannt hast, sollten auch reichen, damit ich hoffentlich fündig werde. Bisher habe ich beim Googlen auch was von "header-Projekten",... gefunden, was dann doch schon ziemlich unverständlich war, zumal ich eher Sprachen a la Java,... (ohne DER Profi darin zu sein) gewohnt bin, wo ich über packages, namespaces,... diverse Sachen machen kann.
Vielleicht noch eine Frage zur IDE: Ich habe Eclipse CDT genommen, da mir dies als erster / häufigster Treffer angezeigt wurde. Was nehmen denn die C++-Profis für IDEs? Damit sind dann ja bestimmt noch ein paar Dinge komfortabler gelöst.
Die von dir erwähnten "static- und dynamic link libraries" habe ich z.B. bei Eclipse als Projekt-Typen auch nicht gefunden.
Ich entwickle aktuell unter Windows 10, mein Raspberry Pi hat aber Raspbian (also quasi Debian). Ich teste aktuell ja noch etwas rum und mache - behaupte ich mal - so OS unabhängige Dinge aktuell noch, dass ich die unter Windows programmieren und testen und dann am Ende unter Raspbian kompilieren kann. Ich hoffe, ich werde keines besseren belehrt und wenn doch ist das ja auch eine schöne Übung und eine Erfahrung mehr.
Vielen Dank und viele Grüße,
Dirk
-
Mean schrieb:
Hallo scrontch,
vielen Dank und vielen Dank für deine Antwort.
Die Schlagworte, die du mir genannt hast, sollten auch reichen, damit ich hoffentlich fündig werde. Bisher habe ich beim Googlen auch was von "header-Projekten",... gefunden, was dann doch schon ziemlich unverständlich war, zumal ich eher Sprachen a la Java,... (ohne DER Profi darin zu sein) gewohnt bin, wo ich über packages, namespaces,... diverse Sachen machen kann.
du kannst dir auch einfach eine statische bibliothek also eine - klasse - test.h & test.cpp coden und dann diese in ein neues projekt includen oder wenn du willst eben eine dynamische-biliothek.
aber ich würde dir vll für den anfang erstmal eine statische empfehlen.
(musst du aber wissen :), kommt auch drauf an wie du sie verwenden möchtest...)Mean schrieb:
Die von dir erwähnten "static- und dynamic link libraries" habe ich z.B. bei Eclipse als Projekt-Typen auch nicht gefunden.
das kannst bei eclipse wenn du ein neues projekt erstellst also: "neu"-""c++ projekt"-"projekt typ"-".... dort kannst dann halt auswählen was du brauchst bzw. willst.
Mean schrieb:
Ich entwickle aktuell unter Windows 10, mein Raspberry Pi hat aber Raspbian (also quasi Debian). Ich teste aktuell ja noch etwas rum und mache - behaupte ich mal - so OS unabhängige Dinge aktuell noch, dass ich die unter Windows programmieren und testen und dann am Ende unter Raspbian kompilieren kann. Ich hoffe, ich werde keines besseren belehrt und wenn doch ist das ja auch eine schöne Übung und eine Erfahrung mehr.
manches läuft unter raspbian genauso wie unter windows.
manches auch nicht...
ist eben ein mikrocontroller.
pauschal kann ich da wenig zu sagen außer, du solltest aufpassen z.B. neuere sprachstandards und anderes wird soweit ich weiß (habe vor ca halben jahr was für raspbian gebaut) nicht voll oder gar nicht unterstützt - compiliert also nicht richtig(wie auch immer sich das dann konkret bemerkbar macht).
wenn du das berücksichtigst und systemunabhänige sachen programmierst, läuft es im normalfall auch unter windows
.
(jedoch könntest unter windows neuere standards verwenden die dann elegenatere und einfachere lösungen erlauben wie ich finde).ps. vll sind auch mittlerweile neuere standards unterstützt. (kann ich gerade nicht genau sagen und habe auch keine zeit mehr zum googlen.
hoff hat etwas geholfen.
lg
-
Vergiss was ich vorher erzählt habe, bzw nimm es mit der Pinzette.
Das einfachste ist wenn Du deine Dateien erstmal alle im gleichen Projekt lässt.
Wichtig ist dann nur die Module sauber zu trennen:
In C++ muss man ja in Header (.h) und .cpp-Dateien auftrennen wenn man Module kapseln möchte.
Du wirst also die Definitionen vom Logger zb in Logger.h stecken, dann die Implementierung in Logger.cpp.
Und den Arbeitscode zB in Arbeit.cpp. Letzterer #include't Logger.h. (aber nicht andersrum)
Da alles im gleichen Projekt ist wird auch alles schön zusammengebacken.
Trotzdem kannst du jederzeit Logger.h/.cpp in ein anderes Projekt kopieren und dort verwenden.
Das ist strenggenommen keine alleinstehende Lib aber trotzdem ein unabhängiges Quellcodemodul.
Das sollte für kleine Projekte reichen.PS:
Unter Windows verwenden "Profis" im allgemeinen Visual Studio. Das gibt's auch in einer kostenlosen Variante: Visual Studio Community (früher Visual Studio Express). Inwieweit dort cross-compilation möglich ist weiss ich nicht.
-
Hallo,
vielen Dank für die ausführliche Antwort.
Die Möglichkeit statische und dynamische Libraries anzulegen habe ich in Eclipse jetzt gefunden (war mal wieder blind O:-)). Danke!
Ich denke, das mit dem Logger im gleichen Projekt und hierarchisch getrennt macht erstmal Sinn. Grundsätzlich würde ich (wenn ich in dem Thema etwas mehr drin bin) dann aber schon gerne den Logger, DbConnector,... alles in eigene Libraries ziehen, damit ich die auch für andere Projekte weiterverwenden kann.
Ob das bei der Größe meiner Spaß-Projekte dann wirklich Sinn macht sei dahingestellt, aber es geht eben hauptsächlich drum Erfahrung zu sammeln und damit "rumzuspielen" und das halbwegs professionell bzw. nicht alles irgendwie hingewurschtelt, hauptsache es geht.
Vielen Dank und viele Grüße,
Dirk