【问题标题】:compile simple hello-world c program for mips netbsd为 mips netbsd 编译简单的 hello-world c 程序
【发布时间】:2014-06-02 23:35:24
【问题描述】:

上周我一直在尝试设置一个编译器,它可以编译为带有 mips 架构的 netbsd。

我在互联网上找不到任何如何做到这一点。所有文档都提到了将内核编译到架构而不是程序。

怎么会这么难……

主机是netbsd amd64机器

【问题讨论】:

  • 从什么主机交叉编译,究竟是什么?
  • amd64 机器运行什么?我的意思是,来吧,别那么难。
  • netbsd,对不起,我很沮丧,因为看起来如此简单的事情根本没有记录好
  • 你从哪里得到的工具链?你是自己编译的吗(如果是,你是如何配置的)?你的“hello world”程序的makefile是什么样的?
  • 您是否在 NetBSD/amd64 开发主机上为您的目标机器自己构建了 NetBSD/mips 映像?

标签: compilation mips cross-compiling netbsd


【解决方案1】:

适当地设置编译器。将它指向 TOOLDIR 中的 gcc 版本。在这种情况下,类似于 mips--netbsd-gcc。一定要确保 TOOLDIR 在您的路径上,以便驱动程序可以找到正确的汇编程序、正确的加载程序和正确的库。

以 src/bin/* 中任意一个 Makefile 为例,通读系统 mk 包含引用的文件(在 src/share/mk 中)

【讨论】:

  • 这就是问题所在。设置编译器是什么意思?我的工具目录中有 mips64el--netbsd-gcc 但如果我使用它,我会遇到大量错误。可能是因为我没有正确设置编译器...查看 /usr/src/share/mk 并没有给我任何线索。我不知道这一切意味着什么。我从来没有在这个级别上使用过编译器
  • 我认为这假设 OP 已经从开发主机为目标机器交叉编译了 NetBSD/mips,但不清楚是否已完成。
【解决方案2】:

一般来说,目标是为target 安装一个工作的交叉编译器和一个文件系统根目录,所有这些都安装在您的开发机器上。需要目标根目录,因为您需要各种库来构建用户态应用程序。这些库需要为 target 而不是主机编译。

假设您从源代码构建所有内容,如下所示:

  1. 为工具链选择一个前缀(比如/opt/mips),为目标的根文件系统选择另一个前缀(比如/opt/target)。所有这些都在您的开发机器上,而不是在目标上!

  2. 为您的目标配置、构建和安装交叉编译器。这进入工具链前缀。

  3. 为您的目标配置、构建和安装内核,并将其安装到目标根前缀中。这应该安装稍后需要的必要内核开发头文件。如果您可以在不编译内核的情况下安装此类头文件,那么您当然可以拥有更多的权力。

  4. 为您的目标配置、构建和安装 C 库(比如 glibc)到目标根目录中。

  5. 配置、构建和安装您的用户级应用程序需要的任何其他库 - 到目标根目录中。

  6. 最后,配置、构建和安装用户态应用程序。安装到目标根目录后,您可以将其复制到目标到相同的前缀中(如之前建议的/opt/target)。

    通常要安装到不同的前缀 - 一个与构建主机上的内容重叠的前缀(如 /usr) - 你需要做一些技巧来欺骗 make install 看到目标前缀而不是你自己的前缀。一种简单的方法是在您的构建主机上拥有一个 chroot 环境,您可以在其中以只读方式绑定挂载前缀(例如 /usr),并在其上覆盖可写的 (mount_union)。

当您为目标构建东西时,您当然需要将正确的参数传递给configure

【讨论】:

  • 这行得通,但它绝对不是更简单的 NetBSD 做事方式,尤其是当 OP 已经在开发主机上运行 NetBSD 时(尽管这并不重要,因为 NetBSD 可以从几乎任何好的 POSIX 兼容主机交叉编译,因此它的交叉编译器工具链和库也可以从几乎任何好的 POSIX 兼容主机交叉编译)。
  • 那么,这种更简单的 NetBSD 做事方式是什么?如果没有目标根,你将如何做?当然目标根可以从目标系统本身获得(duh),但我还缺少什么?
  • 由于 NetBSD 源代码树可以在任何 POSIX 主机上构建,这意味着它必须也可以为目标系统构建交叉编译器和所有必要的库(并安装所有这些库及其相关联的库)工具链可以使用它们的目录中的头文件)。完成后,您所需要做的就是将生成的 $TOOLDIR 放入您的路径中,并使用那里的 make 包装脚本 (nbmake-$MACHINE) 来交叉编译任何其他代码(当然,使用 BSD Makefiles)。也就是说,操作系统的其余部分到底是如何交叉编译的。
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 2022-07-13
  • 2019-09-02
  • 2011-01-11
  • 2012-01-20
  • 2021-01-20
相关资源
最近更新 更多