我已经安装了一个Emdebian的Raspberry PI,并且想要交叉编译项目。将现有的rootfs与自定义工具链结合使用
关于如何获得工具链和使用它构建一个简单的项目有大量的文档。我自己设法用crosstool-ng构建了一个工具链,并编写了一个可以正常工作的Hello World程序。
我没有得到的是如何处理交叉编译更复杂的项目,如Qt,它依赖于其他库。我们以libdbus为例,因为这是Qt的依赖关系之一。
安装的Emdebian已经包含了libdbus.so,所以自然我宁愿使用它,而不是交叉编译我自己的libdbus.so,因为编译Qt的所有依赖都需要很长时间。
进行交叉编译,有两个重要的目录,据我的理解:
- 的“分期”目录,其中已安装的所有库和应用程序生活。这最初是工具链的sysroot目录的副本,并且在它们交叉编译时被填充更多的库。
- “rootfs”目录,它相当于设备上的内容 - 本质上是临时目录的副本,没有不需要的东西,如文档和头文件。据我了解,最好的方法是将所需的文件从暂存目录复制到rootfs中。
获取rootfs目录很容易,因为这可以从设备进行NFS挂载。但是,如何获取PI上现有Emdebian安装的临时目录?暂存目录需要包含诸如dbus标头之类的东西,它们不会安装在rootfs上。
有些人只需在设备上安装dbus标头,用apt-get install libdbus-dev,然后使用rootfs作为登台目录。通过这种设置,rootfs和staging之间不再有区别,缺点是rootfs受到头文件和文档等的污染。当然好处是它很容易。
什么是最好的方式将dbus标题放到我的主机上的临时目录中?在这种情况下人们常用的方法是什么?
作为一个侧面的问题,为什么获得工具链,编译程序然后将其复制到目标工作的方法呢?工具链自带版本的libc,libstdC++等,它们是否与目标上安装的版本不兼容?特别是使用使用crosstool-ng编译的自定义工具链创建时?
(请注意,我不问如何编译Qt的,我能明白这一点我自己。我的问题是更普遍的,讲的是一个现有的安装/根文件系统相结合的自定义工具链时采取的做法)
真棒,debootstrap正是我正在寻找。花了一些时间去研究OpenSuSE,但最终它是完美的:) – 2014-09-30 21:00:02