EDIT: Ich weiß über Wächter einschließen, aber Include-Dateien sind nicht das Problem hier. Ich spreche über tatsächlich kompilierten und bereits verbundenen Code, der in die statische Bibliothek gebacken wird.Wie vermeiden Sie den gleichen Code bei der Verwendung von C++ - Bibliotheken?
Ich erstelle eine universelle Dienstprogrammbibliothek für mich selbst in C++.
Eine der Funktionen, die ich erstelle, printFile
, erfordert string
, cout
und andere solche Mitglieder der Standardbibliothek.
Ich mache mir Sorgen, dass, wenn die Bibliothek kompiliert wird, und dann zu einem anderen Projekt verknüpft, die auch string
und cout
verwendet, um den Code für string
und cout
wird dupliziert werden: Es wird sowohl das Programm in der Bibliothek binär vorgebunden werden soll, Verbunden sein, und es wird wieder mit dem Projekt verknüpft, das sie selbst verwendet.
ist die Bibliothek wie folgt strukturiert:
- Es gibt eine
libname.hpp
Datei der Programmierer, der die Bibliothek verwendet, um#include
in seinen Projekten soll. - Für jede Funktion
fname
inlibname.hpp
deklariert, gibt es eine Dateifname.cpp
, die es implementiert. - Alle
fname.cpp
Dateien auch#include "libname.hpp"
. - Die Bibliothek selbst kompiliert in
libname.a
, die zu/usr/lib/
kopiert wird.
Wird dies sogar passieren?
Wenn ja, ist das überhaupt ein Problem?
Wenn ja, wie kann ich das vermeiden?
OK, ich verstehe. Wie man dies jedoch vermeidet, ist ein großer Teil meiner Frage. – corazza
Ich merke jetzt, dass ich zwei verschiedene Probleme vermische: Code-Duplizierung und Standard-Bibliotheksklassen-Layouts. Die zweite ist kein Problem, wenn Sie Ihr Programm mit dem gleichen Compiler kompilieren, mit dem Sie die Bibliothek kompiliert haben, was Ihrem Fall entspricht. Was die erste betrifft, kann dies zu einem größeren Code führen, ist aber ansonsten kein Problem. – user1610015