Compilation 为mips netbsd编译简单的hello world c程序
上周,我一直在尝试设置一个编译器,它可以编译成具有mips体系结构的netbsd 我在互联网上找不到任何东西如何做到这一点。所有文档都涉及将内核编译到体系结构,而不是程序 这怎么会这么难Compilation 为mips netbsd编译简单的hello world c程序,compilation,mips,cross-compiling,netbsd,Compilation,Mips,Cross Compiling,Netbsd,上周,我一直在尝试设置一个编译器,它可以编译成具有mips体系结构的netbsd 我在互联网上找不到任何东西如何做到这一点。所有文档都涉及将内核编译到体系结构,而不是程序 这怎么会这么难 主机是netbsd amd64计算机正确设置编译器。将其指向TOOLDIR中的gcc版本。在本例中,类似于mips的东西--netbsd-gcc。一定要确保TOOLDIR在您的路径上,这样驱动程序才能找到合适的汇编程序、合适的加载程序和合适的库 以src/bin/*中的Makefile为例,通读系统mk inc
主机是netbsd amd64计算机正确设置编译器。将其指向TOOLDIR中的gcc版本。在本例中,类似于mips的东西--netbsd-gcc。一定要确保TOOLDIR在您的路径上,这样驱动程序才能找到合适的汇编程序、合适的加载程序和合适的库
以src/bin/*中的Makefile为例,通读系统mk include files referenced(在src/share/mk中)一般来说,目标是有一个可工作的交叉编译器和目标的文件系统根,所有这些都安装在您的开发机器上。目标根目录是必需的,因为您需要各种库来构建userland应用程序。这些库需要针对目标而不是主机进行编译 假设您从源代码构建所有内容,如下所示:
/opt/mips
),为目标的根文件系统选择另一个前缀(例如/opt/target
)。所有这些都在您的开发机器上,而不是在目标上/opt/target
)
通常,要安装到不同的前缀中(与构建主机上的内容重叠的前缀(如/usr
),您需要做一些技巧来愚弄使install
看到目标前缀,而不是您自己的前缀。一种简单的方法是在构建主机上有一个chroot环境,您可以在其中以只读方式绑定挂载前缀(比如/usr
),并在其上覆盖一个writable()覆盖当您为目标构建内容时,当然需要将适当的参数传递给
配置。从哪个主机交叉编译,确切地说?运行什么的amd64机器?我的意思是,拜托,别这么难。netbsd,我很抱歉,我只是很沮丧,似乎很简单的东西根本没有很好的文档记录。你从哪里得到工具链的?您自己编译过吗(如果是,您是如何配置的)?“hello world”程序的生成文件是什么样子的?您是否在NetBSD/amd64开发主机上自己为目标计算机构建了NetBSD/mips映像?这就是问题所在。设置编译器意味着什么?我的tooldir中有mips64el--netbsd gcc,但如果我使用它,就会出现大量错误。可能是因为我没有正确设置编译器。。。查看/usr/src/share/mk似乎并没有给我任何线索。我不知道这一切意味着什么。我从来没有在这个级别上使用过编译器我想这是假设OP已经从开发人员主机上交叉编译了目标机器的NetBSD/mips,但不清楚是否已经完成了。这会起作用,但这肯定不是更简单的NetBSD方法,特别是因为OP已经在开发人员主机上运行NetBSD(尽管这并不重要,因为NetBSD可以从大多数良好的POSIX兼容主机上交叉编译,因此它的交叉编译器工具链和库也可以从几乎任何良好的POSIX兼容主机上交叉编译)。那么,什么是更简单的NetBSD方法呢?在没有目标根的情况下,您将如何操作?当然,目标根可以从目标系统本身获得(duh),但我还缺少什么呢?因为NetBSD源代码树可以构建在任何POSIX主机上,这意味着它还可以为目标系统构建交叉编译器和所有必要的库(并将所有这些库及其关联的头文件安装在工具链可以使用它们的目录中)。完成后,您只需将生成的$TOOLDIR放入路径中,然后使用生成包装器脚本(nbmake-$MACHINE)交叉编译任何其他代码(当然,使用BSD生成文件)。这就是操作系统其余部分的交叉编译方式。