我正在学习如何使用汇编语言(顺便说一下,在Raspberry Pi上),我想知道使用gcc
和as
进行编译有什么区别。
到目前为止,我注意到的差异是:
as
做额外的链接步骤。as
似乎比gcc
本身更能识别体系结构。在使用整数除法之类的指令之前,我必须告诉gcc
架构。gcc
可以轻松访问C标准库函数。我认为可以使用as
来做到这一点,但我还没有弄清楚。我想坚持使用特定的编译器。我应该知道还有什么其他区别。使用这两种方法都有优点/缺点吗?
答案 0 :(得分:7)
gcc
只是运行as
(和ld
的前端,除非您使用-c
停在目标文件中而不进行链接)。使用gcc -v
查看其运行以及传递的命令行选项。
如果要链接到库,通常使用gcc
。它知道传递给ld
来设置库路径的正确命令行选项,以及将内容放入ld
命令行的顺序。
您可能会发现gcc -nostdlib
或-nostartfiles
有用,例如如果您想编写自己的_start
,但仍链接库。此外,-no-pie
和/或-static
取决于您如何链接。
如果您想了解有关工具链和链接的更多信息,请确保使用ld
选项,并查看更改选项后会遇到的问题。和/或使用readelf -a
检查生成的可执行文件。
答案 1 :(得分:1)
您也可以在汇编中访问C标准库函数。只需遵循GCC calling convention并使用标准的printf
call。
您必须首先使用as
编译汇编程序才能创建目标文件。之后,您可以使用链接器链接所有必需的库(例如,stdio
)。