我想生成面向 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
应该有我遗漏的东西,你能帮我解决这个问题吗!
如果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 生成代码
你可以看到 Linuxgcc也接受-march。以后可能会失败。
gcc是一个非常复杂的软件,因为它只支持这么多不同的架构。从这个角度来看,它运行得非常好。
另一个有趣的选择是 -v
$ gcc -v
使用内置规范。
目标:i486-linux-gnu
配置:../src/configure -v --with-pkgversion='Debian 4.4.5-8'
[...]
看看它是如何gcc构建的。
可能还有另一个陷阱(多库),正如你在这里看到的