linker - 是否可以在没有链接器的情况下生成工作二进制文件?

标签 linker d

据我所知编译器将源代码转换为机器代码。但此代码没有任何与操作系统相关的部分,链接器将它们添加到文件中。

但是是否可以在没有链接器的情况下制作一些可执行文件?

最佳答案

从字面上回答你的问题 - 是的,可以在没有链接器的情况下创建执行文件:您不需要编译器或链接器来生成机器代码。二进制文件是一系列操作码和相关信息(偏移量、地址等)。如果您打开二进制编辑器,然后输入一些操作码并编写一个程序。保存并运行它。

当然,二进制文件将是特定于处理器的,就像您编译了二进制( native )执行程序一样。这是对 Intel x86 操作码的引用。 http://ref.x86asm.net/coder32.html .

如果您问,“我可以在不使用链接器的情况下将源文件直接编译为执行文件吗?”那么纯粹地说:不 - 除非编译器集成了链接器的各个方面。编译器生成中间对象,这些中间对象被传递到链接器以将它们“链接”到二进制文件,例如库或执行程序。如果没有链接步骤,管道就不完整。

关于linker - 是否可以在没有链接器的情况下生成工作二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48923756/

相关文章:

c++ - 如何让 VS2008 在 C++ 项目中使用 __cdecl 而不是 __thiscall?

preprocessor - D 编程语言中 "#ifdef"、 "#ifndef"、 "#else"、 "#elif"、 "#define"、 "#undef"的类似物是什么?

c - 如何传递 extern(C) 函数文字?

multithreading - Vibe.D 是多线程来处理并发请求的吗?

c - 在 D 中实现 C API

javascript - JavaScript 中的范围式迭代器

linux - 如何将 "-lespeak"添加到代码块?

c++ - 在 Xcode 中链接库

c++ - 制作文件链接问题架构 x86_64 的 undefined symbol

c++ - Linux C++ 编译器(和链接器)如何决定将类型信息放在哪里?