在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之间好像有什么事情搞砸了。虽然我不知道为什么Clang在我使用avr-gcc时会被调用。有人知道这里发生了什么吗?

好的,我不知道为什么clang会被avr gcc调用,但我确实通过卸载代码来编译:(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

以清除该错误。一旦清除,我就可以按照上面的步骤进行操作。同样,这通过重新安装交叉编译软件消除了错误,但我仍然认为对最初的问题存在一些潜在的误解。

我在试图编译在atmega32微控制器上运行的键盘固件时遇到了同样的问题,我不得不在本地重建avr-gcc来修复问题。

虽然接受的解决方案对我不起作用-我再次收到相同的错误

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

对我来说有效的是首先像一样卸载avr-binutilsavr-gcc

brew uninstall --ignore-dependencies avr-binutils
brew uninstall --ignore-dependencoes avr-gcc@9

然后重新安装avr-binutils

brew install avr-binutils

与其简单地重新安装avr-gcc,不如像一样从源代码安装

brew install --build-from-source avr-gcc@9

最新更新