Ungenutze funktionen nicht mit einbinden



  • Hallo,
    wie kann ich es anstellen, das ungenutzte Funktionen nicht mit eingebunden werden?

    /////////////////////////////////////////////////
    //Decalrationsdatei mult_div.h
    unsigned int mult(unsigned char a,unsigned char b);
    unsigned int div(unsigned char a,unsigned char b);

    /////////////////////////////////
    //Implementationsdatei mult_div.c
    {
    unsigned int result;
    result = a*b;
    return result;
    }
    unsigned int div(unsigned char a,unsigned char b)
    {
    unsigned int result;
    result = a/b;
    return result;
    }

    //////////////////////////////////////////////////
    //Hautprogramm
    #include <pic18fxx2.h>
    #include "mult_div.h"
    main()
    {
    unsigned int c;
    while (1)
    {
    c = mult(10,10);
    }
    }

    Es wird nur die Funktion mult benutzt, der Code der Funktion div steht aber trotzdem im Speicher.

    Und gibt es eine Möglichkeit die Funktionen in mult_div.c schon vorher zu
    compilieren und anschliessend nur noch den objektcode einzubinden?

    Gruß
    Johann+++



  • Der Compiler wird alles kompilieren - denn schließlich weiss er nicht, ob andere Übersetzungseinheiten nicht auf die 'unnütze' Funktion zugreifen. Normalerweise killt der Linker aber dann alle nicht referenzierten Symbole.

    Es hängt aber alles von Compiler und Linker ab - welche verwendest du?



  • Shade Of Mine schrieb:

    Der Compiler wird alles kompilieren - denn schließlich weiss er nicht, ob andere Übersetzungseinheiten nicht auf die 'unnütze' Funktion zugreifen. Normalerweise killt der Linker aber dann alle nicht referenzierten Symbole.

    Es hängt aber alles von Compiler und Linker ab - welche verwendest du?

    Ich benutze einen Ansi C Compiler für PIC18 Controller der Firma HITECH.
    Also du meinst, der Compiler compiliert alles aber der linker bindet
    ungenutzten Code nicht mit ein.
    Wenn ich mir aber den bin File anschaue steht der Objektcode trotzdem mit
    drin.
    Ich möchte halt mehrere fertige Funktionen in eine Implementationsdatei
    schreiben, aber die Funktionen die ich nicht nutze sollen nicht im
    Controllerspeicher stehen da der Speicher von Controller etwas knapp ist.

    Gruß
    Johann



  • hermes schrieb:

    Also du meinst, der Compiler compiliert alles aber der linker bindet
    ungenutzten Code nicht mit ein.
    Wenn ich mir aber den bin File anschaue steht der Objektcode trotzdem mit
    drin.

    Ich habe die gängige Praxis beschrieben. Der Linker muss dies natürlich nicht tun.

    uU kannst du deinem Linker es aber trotzdem irgendwie sagen, dass er die Datei 'strippen' soll. uU gibt es dafür auch externe Programme?

    Ich möchte halt mehrere fertige Funktionen in eine Implementationsdatei
    schreiben, aber die Funktionen die ich nicht nutze sollen nicht im
    Controllerspeicher stehen da der Speicher von Controller etwas knapp ist.

    Leider hilft dir hier der C Standard nicht weiter. Ich würde dir raten die Doku deines Compilers/Linkers zu lesen und/oder nach Foren/Newsgroups/Mailinglists für diesen Compiler/Linker ausschau zu halten.



  • Wenn mal die breite Masse der Linker nimmt, insbesondere der non-PC Tools, so werden üblicherweise alle Funktionen, auch die nicht benötigten, eingebunden.

    Selbst der gcc-Linker muß zum Weglassen der unbenutzen Funktionen mit speziellen Optionen aufgerufen werden, und das geht auch nicht auf allen Platformen.

    Ein Trick besteht noch darin, aus den optionalen Funktionen erst eine Library zu bauen.


Anmelden zum Antworten