我想生成面向AVR架构的代码的汇编文件,我使用gcc版本4.7.2,其中包含以下参数:
g ++ -O3 -Wall -S -Wp,-mmcu = atmega8 -o“src \ Compression.o”“.. \ src \ Compression.cpp”
但是我收到以下错误:
cc1plus.exe:错误:无法识别的命令行选项'-mmcu = atmega8'
但是我从gcc网站获得了命令选项: http://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/AVR-Options.html#AVR-Options
应该有一些我不知道的东西,请你帮帮我吧。
答案 0 :(得分:4)
如果gcc
不接受-mmcu
,您可能没有使用支持AVR架构的gcc。
通常像这样使用:
avr-gcc -mmcu = atmega328p
因为它不仅是预处理器,它实际上也是需要此设置的其他工具(链接器,汇编器)。
通常编译的架构gcc
由前缀表示,在这种情况下按惯例它是avr-
。
因此,解决方案是获得具有AVR支持的工具链。您可以从Atmel的网站下载它,甚至可以从Linux下载。
更新
如果您想查看gcc
的配置,可以使用-dumpmachine
检查目标处理器
$ gcc -dumpmachine
i486-linux-gnu$ arm-none-eabi-gcc -dumpmachine
arm-none-eabi$ avr-gcc -dumpmachine
avr
如果您使用--target-help
$ gcc --target-help | grep march
-march =为给定的CPU生成代码
您可以看到Linux gcc
也接受-march
。它可能会在以后失败。
gcc
是一个非常复杂的软件,因为它只支持这么多不同的架构。从这个角度来看,它非常适合 。
另一个有趣的选择是-v
$ gcc -v
使用内置规格。
目标:i486-linux-gnu
配置为:../ src /configure -v --with-pkgversion ='Debian 4.4.5-8'
[...]
了解gcc
是如何构建的。
可能会有另一个陷阱(多库),你可以看到here