C++ und dynamische Bibliotheken



  • Hallo zusammen,
    ich kloppe mich schon geraume Zeit mit einem Kollegen, wie das nun mit den dynamischen Bibliotheken und Klassen unter C++ ist.

    Ich habe eigentlich die Erfahrung gemacht, dass ich ein Programm, dass eine dyn. Bibliothek (z.B. dll unter Windoofs, aber auch .a unter UNIX) benutzt, nur dann neu Linken muss, wenn es eine Funktion benutzt, deren Signatur (Name+Parameterliste) sich geändert hat. Als Folge vermeide ich sowas natürlich, will sagen, wenn eine Funktion einen weiteren Parameter benötigt, dann lasse ich eine Funktion mit der alten Parameterliste stehen, die dann die mit der neuen und einem default-Wert aufruft.

    Ein weiterer Grund zum neu linken wäre, wenn sich die Klasse von ihrer Herkunft her ändert, so dass sie jetzt von einer anderen Klasse erbt als vorher (auch solche Scherze hat mir schon mal ein Basis-Entwickler untergejubelt).

    Ausserdem natürlich irgendwelche Public-Variablen, die direkt aus dem Programm angesprochen werden, aber sowas macht man ja eigentlich nicht ;).

    Mein Kollege meinte jetzt, dass beim Linken auch die Grösse des Objektes mit referenziert wird, so dass auch das hinzufügen von Membern ganz allgemein ein neues Linken erfordern würde 😕 , weil ja sonst die Grösse des anzulegenden Objektes nicht bekannt wäre. Ich dachte eigentlich, das sei Sache des new, dass dann den Konstruktor in der dynamischen Bibliothek benutzt.

    Wisst Ihr da was drüber?

    Gruss von
    Qweety.



  • Wohl nicht ... schade 😞



  • Hi,

    aendert sich was an der Bibliothek, muss diese neu erstellt werden, dass sollte
    klar sein.

    Aendert sie sich dahingehend, als dass du in irgendwelchen Funktionen einen
    Parameter hinzufuegst oder entfernst, musst logischerweise auch den
    entsprechenden Aufruf in deinen Quelldateien aendern, sonst findet er in der
    Bibliothek diese Funktion nicht.

    Wenn du also was an der Bibliothek aenderst (und es ist nicht nur einfach der
    Code innerhalb eines Funktionsrumpfes), dann musst du ganz klar dein Projekt
    anpassen und mit der Bibliothek neu uebersetzen.

    Entfernst du eine Funktion, nutzt dir das wenig, dein Projekt einfach nur neu zu
    linken, denn der Linker wird die entfernte Funktion, wenn sie denn in deinem
    Projekt genutzt wird, nicht mehr finden.

    Hoffe das war die Antwort, die du wolltest

    mfg
    v R



  • Hi VR :)!

    Aendert sie sich dahingehend, als dass du in irgendwelchen Funktionen einen
    Parameter hinzufuegst oder entfernst, musst logischerweise auch den
    entsprechenden Aufruf in deinen Quelldateien aendern, sonst findet er in der
    Bibliothek diese Funktion nicht.

    Soweit ist mir das klar. Das umgehe ich ja dadurch, dass ich die Funktion mit dem neuen Parameter neu erstelle und im Funktionsrumpf der Alten die Neue Aufrufe.
    Dadurch findet das (nicht neu gelinkte) Programm auch in der neuen Dll seinen Einstiegspunkt und funktioniert wie gewünscht, sogar unter Verwendung der Änderung :).

    Die Frage ist, ob sich z.B. durch das Hinzufügen irgendwelcher private-Members etwas für das aufrufende Programm (das ja keinen Zugriff darauf haben sollte) ändert.

    Mein Kollege meint halt, da sich die Grösse des Objekts ändere, müsse ich das aufrufende Programm neu linken.

    Ist das so?

    Obwohl ich damit bisher noch nie Probleme hatte, auch ohne neu Linken.
    Ich meine, dafür hat man ja dynamische Bibliotheken, damit man Modulweise Änderungen und Erweiterungen in eine Anwendung einschleusen kann.

    Danke für die Antwort.
    Gruss,
    Qweety.

    [ Dieser Beitrag wurde am 22.05.2003 um 13:32 Uhr von Qweety editiert. ]



  • Hallo,
    eine definitive Antwort wirst du darauf in Standard-C++ nicht finden. Der Standard kennt weder dynamische Bibliotheken noch definiert er ein festes Objektlayout.
    Du wirst also wohl oder übel in das Handbuch deines Compilers/Linkers schauen müssen.

    [ Dieser Beitrag wurde am 22.05.2003 um 17:05 Uhr von HumeSikkins editiert. ]



  • Hallo Hume,
    war mir nicht bewusst, dass das Compiler-abhängig ist. Sorry 😞 .

    Naja, man kann ja mal fragen. Wieder was dazu gelernt :p .

    Danke und Gruss,
    Qweety.


Anmelden zum Antworten