上周我一直试图建立一个可以用mips架构编译成netbsd的编译器。
我在互联网上找不到任何方法如何做到这一点。所有文档都是指将内核编译为体系结构而不是程序。
这怎么可能这么难......
主机是netbsd amd64机器
答案 0 :(得分:1)
正确设置编译器。将它指向TOOLDIR中的gcc版本。在这种情况下,像mips一样 - netbsd-gcc。绝对要确保TOOLDIR在您的路径上,因此驱动程序可以找到合适的汇编程序,正确的加载程序和适当的库。
以src / bin / *中的任何一个来看看Makefile,并读取系统mk引用的文件(在src / share / mk中)
答案 1 :(得分:0)
一般来说,目标是为目标创建一个有效的交叉编译器和文件系统根目录,所有这些都安装在开发计算机上。由于您需要各种库来构建用户态应用程序,因此需要目标根。需要为目标编译这些库,而不是为主机编译。
假设您从源代码构建了所有内容,它将如下所示:
选择工具链的前缀(比如/opt/mips
)和目标的根文件系统的另一个前缀(比如/opt/target
)。所有这些都在您的开发机器上,而不是目标!
为目标配置,构建和安装交叉编译器。这将进入工具链前缀。
为目标配置,构建和安装内核到目标根前缀中。这应该安装以后需要的必要的内核开发头。如果你可以在不编译内核的情况下安装这样的头文件,当然还有更多权力。
为目标配置,构建和安装C库(比如glibc)到目标根目录。
配置,构建和安装userland应用程序所需的任何其他库 - 到目标根目录。
最后,配置,构建和安装userland应用程序。安装到目标根目录后,您可以将其复制到目标到相同的前缀(比如之前建议的/opt/target
)。
通常要安装到不同的前缀 - 一个与构建主机上的内容重叠的前缀(例如/usr
) - 您需要做一些技巧来欺骗make install
以查看目标前缀而不是你自己的。一个简单的方法是在构建主机上创建一个chroot环境,在这里你可以将前缀(例如/usr
)只读,并在其上面加上可写(mount_union
)叠加层。
当你为目标构建东西时,你需要将正确的参数传递给configure
。