Objektfiles > Programmfile ?



  • Warum sind die Objektfiles zusammen grösser als das spätere ausführbare Programmfile ? der Linker tut doch eigentlich noch zusätzlich Code reinlinken, was fällt denn dann da raus ?



  • Im Objektfile stehen die Funktionsnamen drin. In der späteren Exe sind das dann nur noch Adressen. Gerade bei C++ ist das ein Haufen Zeug.



  • ausserdem kann der linker nicht verwendete funktionen raushauen...



  • ausserdem kann der linker nicht verwendete funktionen raushauen...

    Nicht nur nicht verwendete, auch mehrfach vorhandene. Naja, eine davon muss er natürlich drin lassen 🙂



  • Hmm, und woher weiss er, welche er benutzen soll? Also wenn ich ein Linker wäre, würde ich da mit einer Fehlermeldung "Ich weiss nicht, welche ich nehmen soll", abbrechen. Oder vielleicht "DUplicate Symbol".



  • Original erstellt von frenki:
    Hmm, und woher weiss er, welche er benutzen soll? Also wenn ich ein Linker wäre, würde ich da mit einer Fehlermeldung "Ich weiss nicht, welche ich nehmen soll", abbrechen. Oder vielleicht "DUplicate Symbol".

    ist doch egal welche er nimmt.

    sind ja alle identisch

    n Doppelt definiertes Symbol kanns aber trotzdem geben (wenn man die ODR nicht beachtet)



  • Doppelt definiertes Symbol kanns aber trotzdem geben (wenn man die ODR nicht beachtet)

    Die wenigsten Linker kennen die ODR. Deshalb gibt es auch unzählige Programme, die ODR-Verletzungen enthalten (Inline-Funktionen mit unterschiedlichen Bodies, mehrfach bzw. unterschiedlich instanziierte Templates usw.).
    Gut aufspüren kann man sowas (falls es einen interessiert) in dem man seinen C++ Code mit diesen komischen Managed-C++ Umgebungen übersetzt und linkt. Die sind da nämlich weit aus strenger.


Anmelden zum Antworten