此问题已在此处有答案:
clang interleaved source and assembly(3个答案)
5天前关闭。
我目前正在阅读斯蒂芬·瓦莱恩的一本名为《裸机C》的书,我在第一章中试图运行几个命令时遇到了问题。第一个命令应该请求一个汇编语言列表,该列表以人类可读的格式打印机器代码,以及生成该代码的相应汇编语言语句。另一个命令告诉gcc命令将标志传递给链接器,这样我们就可以看到链接器在内存中放置东西的Map。(刚刚了解到这一切,请耐心等待)
我在终端中键入的命令如下
汇编语言语句列表:gcc -Wall -Wextra -g -Wextra -Wa,-a=hello.lst -c hello.c
错误:clang: error: unsupported argument '-a=hello.lst' to option '-Wa,'
接头图:gcc -Wall -Wextra -static -Wl,-Map=hello.map -o hello hello.o
错误:ld: library not found for -lcrt0.o clang: error: linker command failed with exit code 1 (use -v to see invocation)
编辑:(无法在一条评论中全部列出,我回复Clifford)忘了说我对编程很新鲜,更不用说嵌入式系统了,所以我可能不明白你说的一切,我试图破译它,我希望你能告诉我,如果我是热还是冷。现在,我知道Clang是macOS的默认编译器,所以根据你的说法,macOS决定使用Clang而不是我指定的GCC(稍后会研究)。至于你说的其他事情我就不知道了。在Google上快速搜索后,我发现ARM和x86是不同类型的芯片架构。我的NUCLEO板包含一个ARM芯片,所以我不清楚你说它不是“裸机”或“嵌入式”是什么意思。其次,这本书告诉我,GCC应该已经作为macOS开发人员包的一部分安装,没有提到必须安装GCC交叉编译器。至于ST的STM32CubeIDE,我必须研究和熟悉它。我知道这个网站不是专门教新手的,所以我不指望一个详细的,愚蠢的回应,也许只是一个推荐的地方,我可以更好地学习这些东西。无论如何,感谢您的耐心和时间克利福德
1条答案
按热度按时间ogsagwnx1#
有趣的是,你调用gcc,但得到一个clang错误。苹果决定强制使用clang而不是gcc,如下所述:Mac clang installation seems to override GCC install。
然而,这会调用原生的MacOS编译器,而不是“裸机”或“嵌入式”,并将根据您的Mac针对x86或ARM。想必这本书和打算你已经安装了gcc交叉编译器。它的驱动程序将被称为类似
arm-none-eabi-gcc
的东西,而不是gcc(在这个例子中,用于ARM裸机)。如果你已经安装了一个合适的工具链,你可能需要明确你正在调用的gcc驱动程序。你当然可以让clang/LLVM输出一个汇编器清单,但是考虑到这本书的主题和你的问题标签,我怀疑这不是你所需要的。
这本书的目标是STM32 Nucleo板。为此,我建议您安装ST的STM32CubeIDE for Mac。它包括一个适当的gcc工具链,如果您选择遵循本书,则不需要使用IDE(基于Eclipse)。但是,如上所述,您需要确保调用的是交叉工具,而不是本机编译器。