ungenutze Funktionen werden nicht compiliert



  • Hallo zusammen,
    mir ist letzte Woche ein merkwürdiges Verhalten des GCC aufgefallen. Möglicherweise ist das Standart und soll so sein, ich bin mir aber sicher dass das früher nicht so war. Und zwar baut der GCC keine Funktionen, die ich nicht aufrufe. Ich habe diverse Funktionen in Header-Dateien deklariert und in C-Dateien
    definiert. Wenn ich das Binary dann aber in meinem Debugger lade, und nach Funktionen suche, die gerade nicht aufgerufen werden können, weil z.B. ich den Aufruf gerade auskommentiert habe dann werden die Funktionen nicht gefunden. Vielleicht werden sie compiliert, aber es werden keine Debugging-Sysmbole dafür geschrieben? Vorher hatte ich sowas aber nicht. Dieses Verhalten habe ich bislang nur unter ARM nicht unter x86.

    Woran liegt das?

    Vielen Dank

    Grüsse Christian


  • Mod

    columbus schrieb:

    Woran liegt das?

    Willst du jetzt die genauen Schalter wissen, wie man dieses Verhalten beeinflussen kann, oder reicht es dir zu wissen, dass das durchaus normal ist? Eine fertige Executable ist schließlich keine Bibliothek, es macht daher durchaus sehr viel Sinn, überflüssige Symbole raus zu werfen.



  • Wo ich noch hinzufügen will, dass das auch nicht notwendigerweise vom GCC kommt, sondern viel eher vom Linker, ld. Der Compiler erstellt ja nur die Objektdateien, was daraus wird, geht ihn nichts an (es sei denn, du lässt positionsabhängigen Code generieren, der dann später in ein shared object rein soll, das passt natürlich nicht und du musst die Module nochmal neukompilieren). Der Linker entscheidet dann, was in die zu erstellende Datei reinkommt. Wenn es ein a oder ein so ist, kommt halt alles rein, bei einer Anwendung nur das, was am Ende auch aufgerufen wird.

    Und das ist auch gut so Es sollen ja schliesslich keine toten Pfade existieren.



  • (wobei das jetzt kein exklusives Beispiel ist, sondern nur das erste, was mir durch den Kopf schoss)


Anmelden zum Antworten