分享

linux – 为特定目标平台设置交叉编译环境

 印度阿三17 2019-07-26

我想在Ubuntu 9.10盒子上设置交叉编译环境.从我到目前为止阅读的文件(these ones,for example)来看,这涉及编译目标平台的工具链.

我的问题是:如何确定特定目标平台工具链中每个软件包的所需版本?我可以遵循任何经验法则吗?

这是在上面链接的其中一个网站中找到的列表:

的binutils-2.16.1.tar.bz2
Linux的2.6.20.1.tar.bz2
的glibc-2.5.tar.bz2
的glibc-Linux线程-2.5.tar.bz2
GCC-核心4.2.0.tar.bz2
gcc-g -4.2.0.tar.bz2

但是假设我想为标准的Ubuntu 8.04和CentOS 5.3盒子生成可执行文件.什么是必要的包裹?

我的主要需求是避免在客户的机器中出现“/usr/lib / libstdc .so.6:版本`GLIBCXX_3.4.11未找到”之类的错误,但在将来我也想要处理不同的架构.

解决方法:

建立一个使用目标系统上相同版本的libc(和其他库)的跨工具链通常是个好主意.这对于使用版本化符号的库来说尤其重要,或者你可能会遇到“/usr/lib / libstdc .so.6:版本’GLIBCXX_3.4.11’未找到”之类的错误.

相同的架构

为了生成标准Ubuntu 8.04和CentOS 5.3系统的可执行文件,您可以在虚拟机中安装这些发行版,并在虚拟机中进行必要的编译,以确保生成的二进制文件与每个发行版的库版本兼容.

另一种选择是为目标发行版设置chroot构建环境而不是虚拟机.

您还可以构建针对不同环境(不同库版本)的工具链,并在Ubuntu 9.10环境下构建,而无需使用虚拟机或chroot环境.我使用Dan Kegel的crosstool创建了这样的跨工具链.

不同的建筑

正如我在answer中提到的另一个交叉编译问题,我使用Dan Kegel的crosstool来创建我的arm交叉工具链.

看起来它可能稍微过时了,但是有一个build results的矩阵用于各种体系结构,以帮助确定gcc,glibc,binutils和linux内核头文件的合适组合.

必需的包版本

根据我的经验,确实没有经验法则.并非所有gcc,binutils,glibc和linux标头的组合都能成功构建.即使构建完成,也需要进行一定程度的测试以验证构建的成功.这有时通过使用新的交叉工具链编译Linux内核来完成.根据目标系统和体系结构,可能需要对源进行一些修补才能生成成功的构建.

由于您是在Ubuntu 9.10上设置此交叉编译环境,因此您可能需要查看dpkg-cross程序包.

来源:https://www./content-3-358651.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多