在 CentOS 上构建整个工具链的教程

Posted

技术标签:

【中文标题】在 CentOS 上构建整个工具链的教程【英文标题】:Tutorial on building whole toolchain on CentOS 【发布时间】:2013-01-23 16:50:13 【问题描述】:

我正在使用 CentOS 6 机器,它具有非常旧的 GCC/GlibC 版本。我想用最新或至少非常近的版本构建整个 glibc、binutils、gcc 工具链,以便在最新的 gcc 中使用 c++11 支持,在最近的 binutils 中使用 ld.gold,并可能在最近的 glibc 中进行改进。

我想将整个工具链放在某个单独的目录中,并且不影响任何现有的系统文件。我还想用 --sys-root 构建 gcc,这样在使用 gcc 时,我不需要指定 -I/some/directory/include 和 -L/some/directory/lib 或任何其他参数。生成的可执行文件也会自动使用新的 ld-linux-xxxxx 程序加载器,它会自动找到新的 libc.so。

有人知道是否有关于此任务的教程吗?

【问题讨论】:

你不能在旧系统的 chroot 中安装最近的 CentOS 吗? 您是否已经尝试过此处的说明:gcc.gnu.org/install?如果是的话,你卡在哪里了?请向我们展示一些研究意图。 我实际上花了很长时间尝试它们,但实际上根本不起作用。问题的主要来源是 glibc,其中 ld-linux-xxxx 找不到正确的 libc.so,而且头文件安装在 gcc 找不到的错误位置等。 【参考方案1】:

如果你需要最新的工具链,最好迁移到 Fedora。

如果你不能/不愿意,最好的办法是将这些片段作为 CentOS 和 Fedora 的源 RPM,解压缩它们并通过从 Fedora 窃取源代码和补丁来修复 CentOS,小心它不会' t 否决系统包,正确的版本和修复安装在别处(不要把你的系统搞得太乱!想到/usr/local)。这些片段至少是 binutils、gcc。

【讨论】:

这条指令太抽象了,我看不懂。 @icando,是的,它非常复杂。并且不能保证您最终不会遇到严重损坏的系统。并且您使用该工具链构建的任何东西都不会在其他任何地方运行。如果您真的需要 C++ 2011 功能,请获得一个最新的系统,您可以在其中无缝使用它,而无需您进行任何额外的大量工作。例如,如果您想使用新功能,您甚至可以在虚拟机中运行 Fedora 18。或者等待 RHEL/CentOS 7...【参考方案2】:

我不知道你为什么需要这个?如果需要为另一台计算机编译,我建议使用运行与目标相同的操作系统的虚拟机。更容易!

【讨论】:

我没有做交叉编译。我只需要机器本身的编译器。正如我所提到的,centos 上的工具链太旧,不支持任何 c++11 功能。它也没有ld.gold。 VM 不是一个选项,因为 centos 机器是在 VM 本身中运行的。【参考方案3】:

编译器非常依赖 glibc,尽管您设法在 chrooted 系统或等效系统中构建编译器,但您还需要构建您将使用这个新编译器构建的程序所需的所有库。 您能做的最好的事情就是使用全新的系统(vm 或其他)或升级您现有的系统

【讨论】:

【参考方案4】:

您可以从 Openembedded 或 Yocto 下载最新的工具链。 在这里,您不必对当前系统进行任何软件包安装。 只需下载工具链,获取环境,就可以检查 c++11 支持了。 下载工具链的位置: http://downloads.yoctoproject.org/releases/yocto/yocto-1.7/toolchain/(只需根据您的机器支持选择 32 位或 64 位的架构)

【讨论】:

以上是关于在 CentOS 上构建整个工具链的教程的主要内容,如果未能解决你的问题,请参考以下文章

具有相同代码库和多个工具链的 ccache

linux-arm交叉工具编译链的安装以及vmware tools的安装

Buildroot构建指南——工具链

使用 Hexagon DSP 工具链的多定义链接器错误

关于在 Ubuntu VM(64 位)上安装 ARM 工具链的建议

jz2440上内核和文件系统移植