Umgang mit bestehendem Code



  • Servus,

    mir fehlt gerade die Orientierung ...

    Ich habe eine cpp-Datei, die ist sehr groß und beinhaltet diverse Klassen und baut auf zwei Bibliotheken auf. Ich weiß dass das aus Softwareentwicklungssicht schlecht ist und ggf. werde ich dies vielleicht noch bereinigen.

    Okay, nun will ich die gebrauchten Bibliotheken ausliefern, dass ein anderer Nutzer auf einem mir unbekannten Rechner die main.cpp-Datei einfach kompilieren und das Programm ausführen kann. Bei der einen genutzten Bibliothek gab ich das Compilerflag -I/home/user/libs/meinverzeichnismitderlib mit und das klappte. Soweit ich weiß, wird das Verzeichnis beim Kompilieren einfach mit reingenommen und so werden die eigentlich unbekannten Klassen sichtbar. Ist das geschickt oder nicht?

    Die Alternative scheint das statische Linken zu sein, das klappt aber noch nicht so wie ich will, ich finde im Breymann-Buch nur ein Beispiel mit make-Dateien, dass ich auf meinen einfacheren Fall nicht umbiegen kann.

    Wie muss des Compilerflag lauten, wenn ich etwa eine Boost-Klasse nutzen will, einmal statisch gelinkt und einmal via I-Flag reingeholt?

    Ist es überhaupt möglich oder sinnvoll, auf den Quelltext zur genutzten Boost-Klasse zu verweisen (ich vermute die Boost-Bibliothek hat viele Abhängigkeiten untereinander) oder ist es besser auf bereits kompilierte Objektdateien zu verweisen? Als Laie sehe ich den Nachteil des Quelltextverweises nur darin, dass der Kompiliervorgang wohl länger dauern wird, aber die Laufzeit später beim Anwender völlig gleich bleibt.

    Kann ich einen Vorteil daraus ziehen, dass ich weiß, dass der Empfänger die Dateien in einer mir bekannten Hierachie erhält und die Pfade etwa relativ angeben und so seinen g++-Aufruf bereits vorformulieren?

    Die Hierachie wird sein:
    meinprogrammordner
    |- code
    | |- main.cpp
    |- libs
    | |- lib1ordner ...
    | |- lib2ordner ...

    Danke vorab.



  • Ich glaube, du verwechselst da was:
    Mit -IPfad/zu/boost/include gibst du den Pfad an, in dem die boost-Header liegen, also das, was du bei

    #include<Boostheader>
    

    einbindest.

    Statisch oder nicht statisch ist eine Frage des Linkens.



  • Danke erstmal, ja ich denke mir fehlt weiterhin der Durchblick.

    Wenn ich nun aber die genutzte Bibliothek mit den Sources mit ausliefere und dann passend #include, dann sind dem Programm doch die Klassen bekannt. Kompiliert der Nutzer dann das Programm erhält er seine ausführbare Datei, die funktioniert oder?



  • Bei vielen Klassen von boost sind zwar alle Funktionen im Header implementiert, bei manchen aber auch nicht. Und diese sind dann in der kompilierten Library vorhanden. D.h. was du mit der Klasse machen kannst, ist bekannt, aber nicht immer, was du damit machen kannst. Dazu brauchst du die Library zum Linken.

    Und hintendrein noch mein Standardlink 😉 :
    http://www.c-plusplus.net/forum/p1993089#1993089



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten