Was macht die Standard-Bibliotheken so besonders?



  • Hallo Leute,

    Ich stehe noch ziemlich am Anfang aller Programmiererfahrung mit C++ und vermutlich wage ich mich deshalb mit dieser Frage unverschämt weit aus dem Fenster, aber vielleicht hat trotzdem jemand Lust mir zu helfen:

    Mein Problem: Die Standard Bibliotheken sind sehr einfach zu benutzen, man braucht nur den Include-Pfad und den Pfad für die Bibliotheken angeben, in der entsprechenden Datei die benötigten Header einbinden und schon hat man eine große Auswahl an Funktionen, Typen... ich denke es ist klar, was ich meine.
    Nun gehe ich aber daher und will das auch können, wär ja toll, wenn ich für all meine Funktionen Objektdateien in einem persönlichen Bibliotheksverzeichnis anlegen könnte und natürlich dazugehörige Header Dateien in einem eigenen Include Verzeichnis verstecken könnte. OK, kann ich, aber ich habe die Erfahrung gemacht, dass man jede Objektdaei einzeln beim Linken als Argument erfassen muss, warum reicht es nicht einfach ein allgemeines Bibliotheksverzeichnis festzulegen, so dass man nur noch mit include einbinden muss? Vielleich noch heikler: Wie ist das bei templates (Standard-C++-Libraries beinhalten doch schließlich auch Templates).

    Bevor sich jemand daran wagt, diese Fragen in aller Ausführlichkeit zu beantworten (so optimistisch bin ich jetzt einfach mal), wo liegt mein logischer Fehler, oder wenn nicht, wo finde ich die nötige Info?



  • warum reicht es nicht einfach ein allgemeines Bibliotheksverzeichnis festzulegen, so dass man nur noch mit include einbinden muss?

    Weil diese Möglichkeit im C++ Standard eben nicht vorkommt. Und da das in der Praxis eher weniger relevant ist, gibts auch keine (oder kaum?) Hersteller die entsprechende Erweiterungen implementiert haben.
    Eine Sache die dem Beschriebenen allerdings relativ nahe kommt ist das #pragma comment(lib, "foo.lib") vom Visual C++, und ist in der Tat sehr praktisch. Vom Compiler allerdins ohne einen entsprechenden Hinweis ala #pragma comment(lib, "foo.lib") zu verlangen die entsprechende Lib zu finden halte ich für etwas übertrieben, bzw. sogar für äusserst ungünstig.

    Und: natürlich kannst du selbst auch Bibliotheken machen, dazu musst du dann eben alle deine ".o" Files zu einem ".lib" File zusammenlinken. Dann brauchst du bloss noch ein ".lib" File einzubinden, und nichtmehr einen Haufen einzelner ".o" Files.

    Vielleich noch heikler: Wie ist das bei templates (Standard-C++-Libraries beinhalten doch schließlich auch Templates).

    Bei Templates hast du meistens den Fall dass sowieso alles in den Header-Dateien implementiert sein muss.
    Und Templates sind AFAIK automatisch "inline", d.h. es stört auch nicht wenn die Definition mehrfach vorkommt, sie muss natürlich nur immer gleich sein.
    Dadurch entfällt meistens die Notwendigkeit irgendwelche Dateien dazuzulinken.

    wo liegt mein logischer Fehler, oder wenn nicht, wo finde ich die nötige Info?

    Was für ein Denkfehler? Du stellst Fragen, sagst aber nicht was genau du dir erwartest. Also kann ich dir weder sagen wo dein Denkfehler liegt, noch wo du irgendwelche Infos findest 😉

    EDIT: du hast "logischer Fehler" geschrieben, sorry. Ersetze "Denkfehler" durch "logischer Fehler" 😃



  • Vielen Dank für die Antwort! 🙂


Anmelden zum Antworten