1

我正在使用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 链接语句导致代码大得多。我可以看到两者之间的唯一区别是 Arduino 方式首先创建了一个库。当我比较两者的反汇编(.lss 文件)时,Arduino 有一个很好的紧凑文件,其中散布着源代码。相比之下,CodeBlocks 有很多神秘代码,而且没有我的源代码语句。

有没有办法让 CodeBlocks 首先通过 avr-ar 创建一个库,然后与之链接?这似乎是我的问题,还是我错过了什么?

4

0 回答 0