CodeBlocksを使用して Arduino プロジェクトをコンパイルしています。デフォルトのリンカー コマンドは次のとおりです。
$avr-gcc -o bin/Release/test2.elf .objs/cores/CDC.o .objs/cores/HardwareSerial.o .objs/cores/HID.o .objs/cores/IPAddress.o .objs/cores/main.o .objs/cores/new.o .objs/cores/Print.o .objs/cores/Stream.o .objs/cores/Tone.o .objs/cores/USBCore.o .objs/cores/WInterrupts.o .objs/cores/wiring.o .objs/cores/wiring_analog.o .objs/cores/wiring_digital.o .objs/cores/wiring_pulse.o .objs/cores/wiring_shift.o .objs/cores/WMath.o .objs/cores/WString.o .objs/libraries/libraries.o .objs/test2.o -Wl,--gc-sections -Os -mmcu=attiny84 -lc -lm
Arduino IDE は別のアプローチを使用します。avr-arを使用して単一のライブラリを作成し、その上でリンクを実行します。
/usr/bin/avr-ar rcs build-attiny84at1/libcore.a build-attiny84at1/WInterrupts.o build-attiny84at1/wiring_analog.o build-attiny84at1/wiring.o build-attiny84at1/wiring_digital.o build-attiny84at1/wiring_pulse.o build-attiny84at1/wiring_shift.o build-attiny84at1/CDC.o build-attiny84at1/HardwareSerial.o build-attiny84at1/HID.o build-attiny84at1/IPAddress.o build-attiny84at1/main.o build-attiny84at1/new.o build-attiny84at1/Print.o build-attiny84at1/Stream.o build-attiny84at1/Tone.o build-attiny84at1/USBCore.o build-attiny84at1/WMath.o build-attiny84at1/WString.o
/usr/bin/avr-gcc -mmcu=attiny84 -Wl,--gc-sections -Os -o build-attiny84at1/test.elf build-attiny84at1/sketch.o build-attiny84at1/test.o build-attiny84at1/libcore.a -lc -lm
私の問題は、CodeBlocks リンク ステートメントの結果、コードが大幅に大きくなることです。この 2 つの違いは、Arduino の方法では最初に 1 つのライブラリを作成することだけです。2 つの逆アセンブル (.lss ファイル) を比較すると、Arduino のファイルには、ソース コードが点在する非常にタイトなファイルが含まれていました。対照的に、CodeBlocks のものは謎のコードが多く、私のソース コードの記述はありませんでした。
最初に avr-ar 経由で CodeBlocks を作成してライブラリを作成し、それをリンクする方法はありますか? それは私の問題のようですが、何か不足していますか?