Stefan B. schrieb:
> Mein Linkeraufruf sieht so aus: [...]
Ein Aufruf per avr-gcc würde etwa so aussehen:
1 | avr-gcc -mmcu=atmega2560 -o bastel.elf bastel.o ADS7846.o MI0283QT2.o -lscanf_min -lprintf_min -Wl,Map,test.map
|
Um spezielle Versionen von printf / scanf zu verwenden, wird i.d.R. das
entsprechende Symbol undefined so dass es durch die zusätzlich
angegebenen Libs aufgelöst werden kann, d.h. -Wl,-u,vfprintf siehe
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#gaa3b98c0d17b35642c0f3e4649092b9f1
-lm von hand anzugeben ist ab avr-gcc 4.7 nicht mehr notwendig, und -lc
oder -lgcc händisch anzugeben war noch nie notwendig.
Beispiel: avr-gcc übersetzt eine Quelle foo.c
1 | avr-gcc -mmcu=atmega8 foo.c -save-temps -Wl,-u,vfprintf -lprintf_flt -o foo.elf -v -Wl,-v
|
Die beiden letzten Optionen (-v) dienen dazu, anzeigen zu lassen, welche
Aufrufe avr-gcc veranlasst. Für den Link-Teil sind das 2 Aufrufe:
collect2:
1 | $PREFIX/bin/../libexec/gcc/avr/5.2.1/collect2.exe -plugin $PREFIX/bin/../libexec/gcc/avr/5.2.1/liblto_plugin-0.dll -plugin-opt=$PREFIX/bin/../libexec/gcc/avr/5.2.1/lto-wrapper.exe -plugin-opt=-fresolution=foo.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-latmega8 -mavr4 -o foo.elf $PREFIX/bin/../lib/gcc/avr/5.2.1/../../../../avr/lib/avr4/crtatmega8.o -L$PREFIX/bin/../lib/gcc/avr/5.2.1/avr4 -L$PREFIX/bin/../lib/gcc/avr/5.2.1/../../../../avr/lib/avr4 -L$PREFIX/bin/../lib/gcc/avr/5.2.1 -L$PREFIX/bin/../lib/gcc -L$PREFIX/bin/../lib/gcc/avr/5.2.1/../../../../avr/lib foo.o -u vfprintf -lprintf_flt -v --start-group -lgcc -lm -lc -latmega8 --end-group
|
ld:
1 | $PREFIX/bin/../lib/gcc/avr/5.2.1/../../../../avr/bin/ld.exe -plugin $PREFIX/bin/../libexec/gcc/avr/5.2.1/liblto_plugin-0.dll -plugin-opt=$PREFIX/bin/../libexec/gcc/avr/5.2.1/lto-wrapper.exe -plugin-opt=-fresolution=foo.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-latmega8 -mavr4 -o foo.elf $PREFIX/bin/../lib/gcc/avr/5.2.1/../../../../avr/lib/avr4/crtatmega8.o -L$PREFIX/bin/../lib/gcc/avr/5.2.1/avr4 -L$PREFIX/bin/../lib/gcc/avr/5.2.1/../../../../avr/lib/avr4 -L$PREFIX/bin/../lib/gcc/avr/5.2.1 -L$PREFIX/bin/../lib/gcc -L$PREFIX/bin/../lib/gcc/avr/5.2.1/../../../../avr/lib foo.o -u vfprintf -lprintf_flt -v --start-group -lgcc -lm -lc -latmega8 --end-group
|
Schon ein bissl mehr als in deinem Aufruf...