当我搜索时,我发现7年前的结果谈论的是clang的一个分支而不是clang本身。
使用avr-gcc,我可以编译并上传我的代码。
使用avr-gcc,我可以编译并上传我的代码。
avr-gcc a.cpp -DF_CPU=16000000 -mmcu=atmega2560 -Wall -Werror -Wextra -Os
avr-objcopy -j .text -j .data -O ihex a.out my.hex
sudo avrdude -patmega2560 -cwiring -P/dev/ttyACM0 -b115200 -D -Uflash:w:my.hex:i
我希望用clang++
替换第一步。我在这里做了以下更改:
- 将
avr-gcc
更改为clang++
- 添加
--target=avr
- 添加
-nostdlib
因为我将自己包含它 - 添加
-I/usr/avr/include/
因为路径不是隐式的 - 添加
-L/usr/avr/lib/avr6 -lc -latmega2560
以便有足够的信息来构建elf
我在 /usr/lib/gcc/avr/10.2.0/device-specs/specs-atmega2560 找到了设备规格, 它提到了 crtatmega2560.o
和 -latmega2560
,似乎位于 /usr/avr/lib/avr6/
。因此,我得出了以下编译命令,并遇到了这些错误。我应该如何编译才能获得一个hex文件以上传到avrdude?
$ clang++ a.cpp -DF_CPU=16000000 -mmcu=atmega2560 -Wall -Werror -Wextra -Os --target=avr -I/usr/avr/include/ -nostdlib -L/usr/avr/lib/avr6 -lc -latmega2560
/usr/bin/avr-ld: skipping incompatible /usr/avr/lib/avr6/libc.a when searching for -lc
/usr/bin/avr-ld: cannot find -lc
/usr/bin/avr-ld: skipping incompatible /usr/avr/lib/avr6/libatmega2560.a when searching for -latmega2560
/usr/bin/avr-ld: cannot find -latmega2560
gcc-avr
和avr-libc
时,它们可以正常工作,而不需要直接指定它们,但是clang在处理atmega2560
时会出现问题。 - CPPCPPCPPCPPCPPCPPCPPCPPCPPCPP-c
并且与arv-gcc链接,它不会抱怨,但我不知道代码是否完全不正确。我想在Arduino上使用一种非C语言,该语言会发出LLVM IR,所以我希望稍后能够运行代码。 - Eric Stotchatmega2560
也会出现问题吗? - CPPCPPCPPCPPCPPCPPCPPCPPCPPCPP