使用gcc和as编译汇编有什么区别

What are the differences between compiling assembly using gcc and as

我正在学习如何使用汇编语言(顺便在 Raspberry Pi 上),我想知道使用 gccas 进行编译之间的区别是什么。

到目前为止,我注意到的差异是:

我想坚持使用特定的编译器。我还应该注意哪些其他差异。使用其中任何一种都有优势/劣势吗?

gcc 只是一个运行 as 的 front-end(和 ld,除非你使用 -c 在没有 [=38= 的情况下停止目标文件]ing).使用 gcc -v 查看它运行的内容以及它传递的命令行选项。

如果要 link 库,一般使用 gcc。它知道传递给 ld 的正确 command-line 选项以设置库路径,以及在 ld 命令行上放置内容的顺序。

您可能会发现 gcc -nostdlib-nostartfiles 有用,例如如果您想编写自己的 _start 但仍然 link 库。还有 -no-pie and/or -static 取决于你想怎样 link.


如果您想了解有关工具链和 linking 的更多信息,请务必尝试使用 ld 选项,看看更改选项时会出现什么问题。 And/or 使用 readelf -a 检查生成的可执行文件。

您也可以在汇编中访问 C 标准库函数。只需关注 GCC calling convention and use the standard printf call。 你必须先用 as 编译你的汇编程序来创建一个目标文件。之后,您可以使用 linker 来 link 所有必需的库(例如 stdio)。