【问题标题】:C++ Linking commandC++ 链接命令
【发布时间】:2021-05-06 03:41:06
【问题描述】:

我目前正在尝试使用 C++ 在 Windows 上制作基本编译器。我正在考虑如何将程序集转换为机器代码或 exe 文件。如果这要由另一台计算机下载,我认为如果不附加一个汇编器和链接器,它就无法工作,比如 nasm 和 ld。有没有办法在不发送汇编器和链接器的情况下完成这项工作?

【问题讨论】:

  • 我的建议是使用开源许可证发布您的编译器。我当然不会信任非开源的编译器(是的,我确实阅读了有关信任编译器的论文,这表明即使是开源编译器也可能受到损害)。顺便说一句,您可以直接使用ASMJIT 生成机器代码或使用libgccjit 或生成C 代码

标签: c++ assembly compilation linker compiler-construction


【解决方案1】:

我曾经使用过的每个编译器包都包含一个汇编器和链接器。

大多数现代编译器不直接使用汇编器。同一程序将 C 或其他高级语言直接转换为目标代码。

他们通常会单独进行链接阶段。这可以使用不同的程序,但是这两个程序作为一个包安装在一起,大多数用户并不关心哪个任务由哪个部分执行。

【讨论】:

  • PS:汇编器比 C++ 编译器简单得多。如果你真的有能力编写自己的 C++ 编译器,那么你也应该能够编写自己的汇编器。
  • 没错,但您也可以使用现有的汇编程序,例如 LLVM 是可移植的,甚至与非 GPL 许可证兼容。另请注意,作为从 C -> 目标文件 (Does a compiler always produce an assembly code?) 开始的一部分,主要的 C 编译器 (GCC) 之一确实 仍编译为实际的 asm 文本文件。对于不太主要的编译器来说,更常见的是只使用 asm 文本而不是目标文件,因为这会影响目标文件格式处理以及机器代码。制作一个简单的汇编器相当容易;制作一个 nice 汇编器需要更多的工作。
  • 等等,你会写汇编程序吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-29
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
相关资源
最近更新 更多