1

我想生成面向 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

我应该缺少一些东西,请你帮我解决这个问题!

4

1 回答 1

5

如果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-帮助 | grep march
-march= 为给定的 CPU 生成代码

你可以看到 Linuxgcc也接受-march了。以后可能会失败。

gcc是一个非常复杂的软件,因为它只支持这么多不同的架构。从这个角度来看,它的效果非常好。

另一个有趣的选择是-v

$ gcc -v
使用内置规范。
目标:i486-linux-gnu
配置:../src/configure -v --with-pkgversion='Debian 4.4.5-8'
[...]

看看它gcc是如何建造的。

正如您在此处看到的那样,可能还会有另一个陷阱(多库)

于 2013-06-03T10:38:57.753 回答