gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:04:15 26 4
gpt4 key购买 nike

我想在 Ubuntu 9.10 机器上搭建交叉编译环境。从我目前阅读的文档(these onesfor example)来看,这涉及编译目标平台的工具链。

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

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

binutils-2.16.1.tar.bz2
linux-2.6.20.1.tar.bz2
glibc-2.5.tar.bz2
glibc-linuxthreads-2.5.tar.bz2
gcc-core-4.2.0.tar.bz2
gcc-g++-4.2.0.tar.bz2

但假设我想为标准的 Ubuntu 8.04 和 CentOS 5.3 机器生成可执行文件。需要什么包?

我的主要需求是避免在客户的机器上出现诸如“/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found”之类的错误,但将来我也想处理不同的架构.

最佳答案

构建一个使用与目标系统上相同版本的 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 header 的组合都能成功构建。即使构建完成,也需要进行某种级别的测试来验证构建是否成功。这有时是通过使用新的交叉工具链编译 Linux 内核来完成的。根据目标系统和架构,可能需要对源进行一些修补才能生成成功的构建。


由于您是在 Ubuntu 9.10 上设置这个交叉编译环境,您可能需要查看 dpkg-cross 包。

关于linux - 为特定目标平台设置交叉编译环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2336750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com