【问题标题】:Is cross compiler really required?真的需要交叉编译器吗?
【发布时间】:2017-10-26 19:28:47
【问题描述】:

我遇到了两个用 C 语言制作简单内核的指南。

  1. http://wiki.osdev.org/Bare_Bones
  2. https://github.com/arjun024/mkernel

第一个为i686 架构开发内核,而第二个为i386 开发。

我感到困惑的主要部分是,我们使用交叉编译器来编译和链接第一个,但第二个没有使用。所以如果不使用交叉编译器就可以编译和链接第二个,为什么我们在第一个中使用交叉编译器?

【问题讨论】:

  • 并非每个人都按照特定标准进行编码。许多人没有意识到不使用交叉编译器可能存在陷阱。大多数情况下,如果有问题,它可能与libgcc 库有关。过去,主机发行版为其环境应用了可能需要主机环境资源的补丁。使用交叉编译器将确保您不会生成可能与主机环境相关的代码。 OSDEV 采取了他们希望您使用交叉编译器的立场,因此他们不必处理可能与主机环境相关的问题。
  • OSDEV Wiki 提供了一些关于他们为什么喜欢人们使用交叉编译器的信息:wiki.osdev.org/Why_do_I_need_a_Cross_Compiler%3F
  • 感谢您的评论,我现在有了更清晰的想法! :)

标签: c operating-system kernel cross-compiling osdev


【解决方案1】:

交叉编译器是用于编译到不同平台或架构的编译器。正如上面的 cmets 所说,osdev wiki 上有很多关于它的信息。但一般来说,仅当您编译到与主机相同的平台时才需要交叉编译器。如果您的主机是 x86_64,并且您正在制作针对 x86_64 的操作系统,则不需要交叉编译器。否则,如果您在 x86_64 机器上并正在为 x86(32 位)或 arm 进行编译,则确实需要交叉编译器。

话虽如此,Michael Petch 在他的评论中完全正确,即使用交叉编译器通常是一个非常安全的选择,消除了与主机相关的一些问题。虽然我自己从未遇到过这些问题,但它们是合理的担忧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多