Fragen zum Linken von Libraries



  • Hi,

    ich nutze derzeit den g++ 4.5 zum Kompilieren und Linken meiner Programme. Wenn ich eine Fremdbibliothek nutzen muss kompilieren ich die immer vorher selbst weil ich gehört habe das dies besser sein soll. Nun meine Fragen dazu:

    1. Warum ist das Linken von mit dem gleichen Compiler erstellen Libs "besser"?
    2. Was mache ich wenn ich nicht selbst kompilieren kann, weil closedsource?
    3. Gibt es da einen Unterschied ob ich Libs statisch oder dynamisch linke wenn diese mit unterschiedlichen Compilern erstellt wurden(bsp MinGW, VisualStudio)?

    Ich hoffe ich habe die Fragen nicht zu blöd formuliert.



  • Wenn dir jemand gesagt hat, das es besser ist, dann ist das falsch! Besser ist eine relative Angelegenheit, evtl. sogar eine geschmackliche Sache. Aber bei Null und Einsen wohl eher nicht der Fall. 😉

    Das Thema ist komplexer. Es geht darum, das der C++ Standard kein binäres Interface für Bibliotheken vorschreibt. D.h. die Funktionen und Klassen, wie sie aufgerufen werden können, ist von Compiler zu Compiler unterschiedlich. Im Gegensatz zum Sourcecode, wo wir wissen, wie eine Funktions- und Klassen-Definition vorgeschrieben ist.

    Wenn du dem MSC eine MinGW-Library zum linken gibst, wird der MSC nicht wissen, wo und wie die Funktionen und Klassen aufrufbar sind. Und das gilt auch für Compiler untereinander, z.B. MSC 13.0 und MSC 15.0.

    Das ist nur ein Teil! Es gibt aber noch die Runtime. Also die Basis-Funktionen, wie Speichermanagement. Der MinGW verwaltet Objekte anders als der MSC. Aber auch der MSC 13.0 verwaltet möglicherweise Objekte anders als MSC 15.0. Also muß man auch hier gegen eine andere Library linken.

    Wenn dir jemand eine Library für den MSC 15.0 gibt, und Du einen MSC 15.0 nutzt, gibt es eigentlich keinen Grund es noch mal selber zu bauen.

    Was Closed Source angeht: ein Anbieter von CS-Libraries muß dann halt seine Lib für mehrere Compiler anbieten. Aber Closed Source Libs sind meistens auch im Sourcecode verfügbar, nur darf man den Source dann nicht weiter geben. Wenn du die CS-Lib für deinen Compiler vermisst und diese nicht bekommen kannst, verliert die Lib halt einen potentiellen Kunden. 😉 Da greifen halt die Regeln der Marktwirtschaft.

    Du siehst aber, es hat am Ende nichts mit besser zu tun. Es sind einfach technisch harte Fakten. 😃



  • Neben den allgemeinen Vor-/Nachteilen gibt es zu 3.) noch lizenzrechtliche Aspekte, vorallem in Bezug zur LGPL zu erwähnen: LGPL-lizensierte Software darf man aus seinem (closed source) Programm heraus aufrufen, das schließt ein dynamisches Linken mit ein (die Library liegt separat im Verzeichnis und wird nur benutzt), aber ein statisches Linken mit aus (dein Programm macht sich den fremden Programmcode zu eigen).


Anmelden zum Antworten