我正试图使用通过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-binutils
和avr-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