gpt4 book ai didi

c++ - 使用带有新 glibc 和 binutils 的 GCC 为具有旧 sysroot 的系统构建软件

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:29 25 4
gpt4 key购买 nike

几个月以来我一直有一个问题,很长一段时间都无法通过 Google 得到答案。

背景:我正在为运行 linux 发行版 ptxdist 的基于 arm 的 Controller 交叉编译软件。完整的 linux 镜像是使用针对 glibc-2.13 和 binutils-2.21 构建的交叉 gcc (4.5.2) 构建的。c++ 标准很旧,所以我构建了一个支持 c++11 (gcc 4.8.5) 的新工具链。它现在是针对 glibc-2.20 和 binutils-2.24 构建的。我想在 Controller 上为我的应用程序软件使用那个新的编译器(不是完整的图像,只是这个“主”二进制文件),它通过包管理系统更新。

软件似乎可以运行。我只需要将 LD_LIBRARY_PATH 设置为指向 libstdc++.so.0.19 而不是二进制文件的 libstdc++.so.14。不过,它不接受新的 libc,即 libc-2.20 而不是 libc-2.13。

所以二进制使用libstdc++.so.0.19,系统其余部分不变。

问题:为什么这是有效的?运行该软件会有什么风险,我应该这样做吗?例如,二进制文件将来会错过 glibc-2.20 的某些功能,因为它只是在目标机器上获取 glibc-2.13 吗?针对 glibc-2.13 构建 gcc-4.8.5 是不可能的。

到目前为止,我已经读到它取决于 ABI 内部的变化: Impact on upgrade gcc or binutils

这里说如果从GCC4.1构建到GCC 4.8,C代码是兼容的。

谢谢!

最佳答案

glibc 2.14 引入了 memcpy@GLIBC_2.14 符号,因此几乎所有针对 glibc 2.20 编译的软件都无法在 glibc 2.13 上运行,因为那里缺少该符号。理想情况下,您将针对 glibc 2.13 而不是 glibc 2.20 构建新的 GCC。您声称无法针对 glibc 2.13 构建 GCC 4.8.5,但这显然不是一般情况。

一些较新的 C++ 功能将与旧系统 libstdc++ 一起使用,因为它们完全依赖于模板(来自头文件),而不依赖于 libstdc++ 中的任何新代码。

您还可以研究混合链接模型在 Red Hat Developer Toolset 中的工作原理。它静态链接 libstdc++ 的较新部分,同时依赖于系统 libstdc++ 获取常见的较旧部分。这样,您就可以针对异常等问题获得适当的互操作性,而无需在目标上安装更新的 libstdc++。

关于c++ - 使用带有新 glibc 和 binutils 的 GCC 为具有旧 sysroot 的系统构建软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53518353/

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