繁体   English   中英

使用 gcc 和 as 编译程序集有什么区别

[英]What are the differences between compiling assembly using gcc and as

我正在学习如何使用汇编语言(上树莓派顺便说一句),我想知道有什么区别之间使用gccas做编译。

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

  • 我应该用as做额外的链接步骤。
  • 在 Raspberry Pi 上, as似乎比gcc本身更能识别架构。 我必须先告诉gcc架构,然后才能使用整数除法之类的指令。
  • 使用gcc我可以轻松访问 C 标准库函数。 我认为这可以使用as但我还没有弄清楚。

我想坚持使用特定的编译器。 我应该注意哪些其他差异。 使用两者是否有优势/劣势?

gcc只是一个前端,它as (和ld运行as除非您使用-c在没有链接的情况下停止目标文件)。 使用gcc -v查看它运行的内容以及它传递的命令行选项。

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

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


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

您也可以在汇编中访问 C 标准库函数。 只需遵循GCC 调用约定并使用标准printf 调用 您必须首先使用as编译您的汇编程序以创建目标文件。 之后,您可以使用链接器链接所有必需的库(例如stdio )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM