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

use*_*074 1 assembly gcc gnu-assembler raspberry-pi

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

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

  • 我应该使用做额外的链接步骤as
  • 在Raspberry Pi上,as似乎比单独识别要好gccgcc在使用整数除法之类的指令之前,我必须告诉架构。
  • 随着gcc我可以很方便地在C标准库函数。我认为可以使用,as但我还没有弄清楚。

我想坚持使用特定的编译器。我应该知道还有什么其他区别。使用这两种方法都有优点/缺点吗?

Pet*_*des 7

gcc只是运行的前端asld除非您-c习惯在不链接的情况下停止目标文件)。使用gcc -v看看它运行什么,它通过什么命令行选项。

如果要链接库,通常使用gcc。它知道要传递给ld设置库路径的正确命令行选项,以及将内容放入ld命令行的顺序。

您可能会发现gcc -nostdlib-nostartfiles有用,例如,如果您想编写自己的_start但仍然链接库。也-no-pie和/或-static取决于您要如何链接。


如果您想了解有关工具链和链接的更多信息,请务必尝试使用ld选项,并查看更改选项时会遇到的问题。和/或用于readelf -a检查生成的可执行文件。