B
Hoppla, hab deine Antwort hier uebersehen
cilker schrieb:
Okay Bluetiger I'll accept what you write about.. oh ist ein deutsches Forum sorry, ich war nur kurz auf deiner Homepage ;-). Was du über iostream schreibst ist interessant und war mir neu und erklärt ein paar Fragen. Ich muss mich wohl daran gewöhnen, dass es für den Linker keine Namenskonventionen gibt (geben kann) zwischen Headern und Libraries und dass ich alle Libs per Hand linken muss (puh).
Aber du schreibst
Aber was wenn 2 Bibliotheken Funktionen gleichen Namens enthalten?
Ich denke das dürfte eh nicht erlaubt sein durch die ODR (one definition rule).
Na ja, ich meinte ja nicht im selben Programm, sondern ueberhaupt! Der Linker "sieht" ja nicht mehr, welche Dateien du inkludiert hast!
Du stellst es dir ja so vor: der User inkludiert "blabla.h", und darin ist eine Funktion namens "foo" enthalten. Der Code fuer "foo" befindet sich in "blabla.so". Der Linker soll jetzt automatisch wissen "blabla.h" wurde inkludiert, also muss ich "blabla.so" mitlinken. Dass es in irgend einer anderen *.so-Datei (z. B. "baz.so") noch eine andere Funktion 'foo' gibt, die aber ganz was anderes tut, soll dem Linker egal sein.
Zu dem Zeitpunkt, wo der Linker arbeitet, sieht er nur noch "eine Funktion 'foo' wurde aufgerufen, den Code fuer 'foo' hab ich aber nicht". Da er keine Information hat, welche includes im Quellcode standen, kann er nicht wissen, ob er jetzt 'baz.so' oder 'blabla.so' dazu linken soll.
Zugegeben, das ganze koennte man irgendwie umgehen, indem man sich 'nen intelligenten Compiler/Linker schreibt, wo der Compiler irgendwo abspeichert, welche Dateien inkludiert wurden und der Linker dann daraus mit Hilfe einer Datenbank weiss, welche Datei dann dazu gelinkt werden muss. Allerdings muss die dann vom Benutzer verwaltet werden (schliesslich kann sich der ja jederzeit entscheiden, *.so-Dateien einfach umzubenennen, und dann steht der Linker bloed da), und angesichts der Tatsache, dass Includes (besonders bei groesseren Bibliotheken) selbst wieder zig Includes haben, wuerde die Datenbank sehr schnell uuuuuuunglaublich gross werden, was den Linkvorgang sehr verlangsamt.