Hallo Zusammen

Naja der Titel ist nicht super, ich weiss. Es geht um folgendes: Also der Compiler kopiliert ja alle Funktionen eines Moduls und schrieb diese in eine Object file (*.o). Nun linkt der Linker doch diese Funktionen dann zu einem "aneinanderhängenden" Code zusammen und schaut das die CPU dann für die richtige Funktion auch an den richtigen Ort springt. Ich dachte immer, dass dabei die Funktionen, welche nirgends aufgerufen werden im map-file (der Ausgange vom Linker) gar nirgends erscheint und folglich später nicht in das zu übertragende hex-File kommen.

Leider bringt der Linker trotzdem folgende Fehlermeldung, auch wenn die verwendeten Funktionen Platz hätten. (Einfacher Test: Ich kompiliere ein Projekt, welches zb. in die 8kb des ATmega8 passen. Dann schreibe ich irgendwo noch eine lange Funktion rein, rufe diese jedoch nirgens auf. Dann kommt auch diese Fehlermeldung)
Code:
Building target: avr_main
Invoking: GCC C Linker
avr-gcc -mmcu=atmega8 -Wl,-Map,avr.map -o"avr_main"  ./_eeprom.o ./_i2c.o ./_string.o ./comm.o ./gsmapi.o ./gsmhw.o ./gsmtools.o ./gsmuart.o ./i2c_debug.o ./main.o ./out.o ./parse.o ./ram.o ./wait.o   
/usr/local/avr/lib/gcc/avr/4.0.3/../../../../avr/bin/ld: region text is full (avr_main section .text)
make: *** [avr_main] Error 1
make: Target `all' not remade because of errors.
Build complete for project m8
Was gibt es für Lösungen für dieses Problem?

Ich habe Module, welche ich in verschiedenen Projete verwende jedoch nicht immer alle Funktionen brauche. Jetzt fressen mir die Funktionen, welche ich nicht brauche trotzdem Programmspeicher.

Vielen Dank für eure Hilfe!
cumi