linux – 将现有的rootfs与自定义工具链相结合

linux – 将现有的rootfs与自定义工具链相结合,第1张

概述我已经安装了一个带有Emdebian的Raspberry PI,并希望交叉编译项目. 有很多关于如何获得工具链并使用它构建一个简单项目的文档.我自己设法用crosstool-ng构建了一个工具链,并编写了一个工作正常的hello world程序. 我没有得到的是如何处理交叉编译更复杂的项目,如Qt,它们依赖于其他库.我们以libdbus为例,因为这是Qt的依赖项之一. 已安装的Emdebian已经 我已经安装了一个带有Emdebian的RaspBerry PI,并希望交叉编译项目.

有很多关于如何获得工具链并使用它构建一个简单项目的文档.我自己设法用crosstool-ng构建了一个工具链,并编写了一个工作正常的hello world程序.

我没有得到的是如何处理交叉编译更复杂的项目,如Qt,它们依赖于其他库.我们以libdbus为例,因为这是Qt的依赖项之一.

已安装的Emdebian已经包含了libdbus.so,所以我更愿意使用它,而不是交叉编译我自己的libdbus.so,因为编译Qt的所有依赖都需要花费很多时间.

对于交叉编译,据我所知,有两个重要的目录:

>“staging”目录,其中存在所有已安装的库和应用程序.这最初是工具链的sysroot目录的副本,并且在交叉编译时会填充更多库.
>“rootfs”目录,相当于设备上的内容 – 本质上是登台目录的副本,没有文档和头文件等不需要的东西.据我了解,最好的方法是将所需的文件从登台目录复制到rootfs中.

获取rootfs目录很简单,因为它可以是来自设备的NFS挂载.但是,如何在PI上获取现有Emdebian安装的暂存目录?登台目录需要包含诸如dbus标头之类的东西,这些标头未安装在rootfs上.

有些人只需使用apt-get install libdbus-dev在设备上安装dbus头,然后使用rootfs作为暂存目录.使用此设置,rootfs和staging之间没有区别,缺点是rootfs受到头文件,文档等的污染.当然,优势在于它很容易.

将dbus标头放入主机上的暂存目录的最佳方法是什么?人们在这种情况下使用的常用方法是什么?

作为一个附带问题,为什么获得工具链,编译程序然后将其复制到目标上的方法根本就起作用?工具链附带了自己的libc,libstdc等版本,它们是否与目标上安装的版本不兼容?特别是在使用使用crosstool-ng编译的自定义工具链创建时?

(请注意,我不是在问如何编译Qt,我可以自己解决这个问题.我的问题更为笼统,关于将自定义工具链与现有安装/ rootfs结合使用时的方法)

解决方法 根据我的经验,您不需要编译您的dbus.你可以这样做

通过debootstrap在https://wiki.debian.org/EmDebian/CrossDebootstrap之前创建Debian交叉rootfs
通过crosstool-ng创建交叉编译工具链,并确保内核版本和eglibc版本与第1步创建的rootfs相同
建立QT by

CPPFLAGS=-I<rootfs>/usr/include \LDFLAGS=-L<rootfs>/lib -L<rootfs>/usr/lib -Wl,-rpath-link,<rootfs>/lib,<rootfs>/usr/lib \./configure <your options>make

将QT安装到stage目录中

make install DESTDIR=<stage directory>

从rootfs复制QT依赖库您的stage目录

所以你可以看到,舞台目录保持最小而没有污染.

总结

以上是内存溢出为你收集整理的linux – 将现有的rootfs与自定义工具链相结合全部内容,希望文章能够帮你解决linux – 将现有的rootfs与自定义工具链相结合所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1029465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存