首页 > 解决方案 > 在 Mac OS 上使用 AVR-GCC 编译时引发 Clang 错误

问题描述

我正在尝试使用通过 macports 安装的 avr-gcc 交叉编译 AVR 的程序。在终端:

avr-gcc -O1   -DF_CPU=1000000UL -DBAUD=9600 -I.  -I/opt/local/avr/include/ -Wl,-Map,main.map -mmcu=atmega328p main.c -c

这导致错误:

clang: error: unknown argument: '-mgcc-isr'
clang: error: unknown argument: '-mno-skip-bug'

上面的交叉编译过去可以工作,但是在更新到 Catalina 并重新安装 avr-gcc 之后,事情变得一团糟。搜索谷歌我发现,对于较新版本的 Clang,如果 Clang 无法识别命令行参数,则会引发错误。建议使用类似 -Wno-error=gcc-isr 的东西。所以我的命令变成:

avr-gcc -O1  -Wno-error=gcc-isr -DF_CPU=1000000UL -DBAUD=9600 -I.  -I/opt/local/avr/include/ -Wl,-Map,main.map -mmcu=atmega328p main.c -c

这导致:

cc1: error: ‘-Werror=gcc-isr’: no option -Wgcc-isr

看起来 Clang 和 avr-gcc 之间有些混乱。虽然我不确定为什么在使用 avr-gcc 时会调用 Clang。有谁知道这里发生了什么?

标签: clangavr-gcc

解决方案


好的,我不确定为什么用 avr-gcc 调用 clang,但我确实设法通过卸载来编译代码:(1) avr-gcc 和 (2) avr-binutils 通过 macports 使用:

sudo port uninstall avr-binutils
sudo port uninstall avr-libc (I uninstalled this because it depends on avr-gcc)
sudo port uninstall avr-gcc

然后我重新安装了它

sudo port install avr-gcc

它询问我是否要安装 avr-binutils。然后我重新安装了avr-libc。这些是直接的步骤。当它问我是否要安装 avr-binutils 时,我按“N”是错误的。所以我添加了:

sudo port clean avr-binutils

清除该错误。清除后,我可以按照上述步骤操作。同样,这只是通过重新安装交叉编译软件来清除错误,但我仍然认为对原始问题存在一些潜在的误解。


推荐阅读