Erstellen eigener Bibliotheken



  • Hallo,

    eigentlich komme ich aus der Java-Welt, deshalb vielleicht eine etwas merkwürdige Frage: Wenn ich eine kleine Bibliothek erstellen möchte,die von anderen Programmierern in anderen Projekten verwendet werden kann, wie geht man da in C++ vor? In Java baue ich mir einfach ein Jar-File zusammen und binde die in meinem anderen Projekt in den Klassenpfad ein. Fertig.

    In C++ arbeite ich mit Netbeans unter Linux. Nun kann ich mit Netbeans eine statische oder eine dynamische Bibliothek schreiben. Nach beidem habe ich schon gesucht, aber so richtig wird mir der Unterschied nicht klar.

    Ist es so, dass eine dynamische Bibliothek irgendwie im System installiert ist und ein Programmierer, der sie verwendet, einfach "ins Dunkle" verlinkt und hofft, dass auf dem Zielsystem diese Bibliothek installiert ist? Und bei einer statischen Bibliothek verlinkt er während der Entwicklung mit einer physisch vorhandenen Bibliothek, und liefert dann eine ausführbare Datei, in welcher der Code der Bibliothek mit eingebunden ist?

    Wenn das so ist, dann wäre für mein Projekt eine statische Bibliothek das richtige. Nun habe ich das in Netbeans auch so eingerichtet. Zusätzlich zu meinem Lib-Projekt habe ich ein Testprojekt, in dem ich die statische Bibliothek verlinke, was mich dann gleich zur nächsten Frage führt: warum wird die ausführbare Datei so "groß"? Ich habe ca 700 Zeilen Code in meiner Lib, benutze eigentlich nur C++ Standard-Sachen und naja, Die STL-Container Klassen wie std::vector ...

    Trotzdem hat meine ausführbare Datei knapp 170 KB. Ist das normal?

    (Sorry, wenn die Fragen etwas lächerlich klingen, aber ich komme halt aus der Java-Welt)

    Gruß
    Andreas



  • Bei einer statischen Bibliothek werden alle benötigten Bestandteile in das ausführbare Programm kopiert. Zur Laufzeit wird nur diese Datei benötigt. Eine dynamische Bibliothek ist wie ein jar: sie muss auch zur Laufzeit vorhanden sein.



  • Hallo und Danke erst einmal für die Antwort.

    manni66 schrieb:

    Bei einer statischen Bibliothek werden alle benötigten Bestandteile in das ausführbare Programm kopiert. Zur Laufzeit wird nur diese Datei benötigt. Eine dynamische Bibliothek ist wie ein jar: sie muss auch zur Laufzeit vorhanden sein.

    Okay, statisch ist mir dann klar. Wenn ich in Java ein Jar als Bibliothek habe, dann liefere ich das normalerweise aber mit meiner Distribution aus. Wenn ich in C++ eine dynamische Library habe, dann habe ich ja nichts gewonnen im Vergleich zu einer statischen Library (außer, dass ich vielleicht einen Dateien weniger habe).

    Reicht es im Falle einer dynamischen Lib denn aus, wenn ich meine Distribution ohne die Bibliothek ausliefere und als "Voraussetzung" davon ausgehe, dass der Benutzer die Bibliothek (wie auch immer) auf seinem System installiert hat? Das würde dann für mich Sinn machen, da bei einer Änderung der Bibliothek (ohne Änderung der Schnittstelle) dann ja nur eine Bibliothek ausgetauscht werden müsste, für n Programme, welche die Bibliothek verwenden.

    Wie gesagt, die Frage klingt vielleicht etwas lächerlich, aber in der Java-Welt bin ich mit diesem Konzept bislang nicht so in Kontakt gekommen.

    Gruß,
    Andreas



  • dann habe ich ja nichts gewonnen im Vergleich zu einer statischen Library

    stell dir einfach vor deine dynamische Library ist eins von 2000 Plugins für dein Programm - statisch könnte deine Applikation sehr gross werden - und du kannst auch nicht einfach Funktionalität austauschen



  • calinied schrieb:

    Reicht es im Falle einer dynamischen Lib denn aus, wenn ich meine Distribution ohne die Bibliothek ausliefere und als "Voraussetzung" davon ausgehe, dass der Benutzer die Bibliothek (wie auch immer) auf seinem System installiert hat?

    So wird es oft gemacht.


Log in to reply