lib erstellen/aufrufen



  • ich habe in den projekt welches die lib erstellt eine *.h datei welches die ganzen klasse includiert
    aber ich kann aus dem lib_test projekt keine header aufrufen - immer unbekannt



  • Wenn du die Klasse in einem anderen Projekt verwenden willst mußt du dort die lib deinem Projekt hinzufügen und die Hederdatei da inkludiern wo du die Klasse verwenden willst.



  • ich versteh nicht - welche header - ich habe doch nur die *.lib datei

    wie gesagt

    ein projekt erstellt - da alle cpp und h der klasse reingeworfen - compiliert und die daraus resultierende lib will ich weiterverwenden, ich nahm an das in der lib dann alle klassen drinne sind die ich brauch

    also muss ich doch irgendwie sachen aus der lib aufrufen koennen



  • Du brauchst aber in dem anderen Projekt die Header, da dort die Deklarationen drin sind (damit der Compiler weiss, was es gibt) und die .lib, mit den Definitionen (damit der Linker das, von dem der Compiler weiss, dass es das gibt, auch findet).



  • ach - also die lib beinhaltet NUR die definitionen ???
    des is doch aasch - da kann ich mir das mit der lib gleich spaaren

    ich dacht das die lib die definitionen UND deklarationen beinhalten

    {wenn ich die *.h auch kopier kann ich fehlerfrei compilieren und es benutzen}

    //edit because peinliche tippfehler



  • Ja, aber Du brauchst den Quellcode der Implementierung nicht mehr. Und dass es eine Funktion "foo" gibt, die einen Parameter vom Typ int annimmt (bspw.), weiss der Benutzer Deiner Bibliothek mit oder ohne Header, denn sonst kann er die Funktion "foo" nicht benutzen 😉

    Es gibt auch Sprachen, wo die Deklarationen als Teil des Binärcode eingebettet werden und dann vom Compiler bzw. Tools ausgelesen werden können. Die .NET-Familie z.B., oder Java.



  • wie ist das bei dll files ? verhaelt es sich dort genauso ?

    jetzt zZt geht es eigentlich nur darum das ich selber wenn ich meine sachen weiterverwenden will nicht lauter dateien jedesmal kopieren wollte sondern nur die eine lib

    da ist mir grad beim schreiben ein einfall eingefalln - ich pack einfach alle klassen deklarationen {zusaetzlich} in eine einzelne datei und compiliere die lib

    dann brauch ich in den anderen projekten nur die eine h und die lib einbinden und hab alle klassen

    denk mal das das was nicht benutzt wird eh wegoptimiert wird beim release

    dankoe



  • Ja, das ist bei dlls genau so.
    Wenn du alle Deklarationen in eine Headerdatei packst wird dein Projekt ganz schnell unübersichtlich. Lass das lieber. Pack alle notwendigen Headerdateien in ein spezielles verzeichnis (includes) und kopier das immer mit. So wird es auch bei allen größeren Bibliotheken gemacht.



  • Eine LIB-Datei hat trotzdem vorteile. Z.B. kannst du vor dem Benutzer Klassen und Funktionen "verstecken", in dem du ihm entsprechende Headers nicht mitlieferst. So kannst du ihm nur die für den Anwender wichtigen Headers mitschicken. Denn die Lib selbst braucht die Headers nicht. Wenn Du z.B. Klasse A und Klasse B hast, aber der Anwender immer nur A benutzt, und A benutzt B, lieferst du nur die Header für A aus. Sobald der Anwender natürlich B braucht, muß die Header wieder mit.

    Wenn man nur Headers und CPPs "ausliefert", bekommt der Anwender immer alle Klassen und Funktionen zu Gesicht, obwohl er vielleicht nur 10% davon direkt benutzt. Klar, ist vielleicht nicht schlimm, aber kann den Anwender auch unnötig verwirren, obwohl er das nicht bräuchte.

    Zur Optimierung: ja, der MSVC optimiert alles weg, beim verlinken der EXE. Ich habe z.B. eine statische Lib, die ist ca. 700 KB groß. Aber wenn ich nur zwei drei Dinge daraus brauche, ist meine EXE am Ende trotzdem nur 64 KB groß.



  • aaah, vielen dank {=


Anmelden zum Antworten