需要GLIBC 2.7版本。在支持早期glibc的同时,使用更高版本的GLIBC编译C ++代码

幻影

我有两台机器,

  1. RHEL 4机器
  2. RHEL 6机器

现在,我有了可以在RHEL4机器上编译的代码,然后可以在两台机器上运行可执行文件。但是,如果我在RHEL6计算机上编译相同的代码,则无法在RHEL4计算机上运行可执行文件。它将引发错误“需要GLIBC 2.7版本”。

现在的问题是,RHEL6计算机上的GLIBC 2.7已经支持较早版本,并且具有与较早版本相关的标头。所以我可以以某种方式告诉我的gcc编译器使用特定的早期版本的gcc来编译代码。(因为它可以在早期版本上进行编译...)

更多信息:

$ readelf -a glibc

在RHEL4机器上显示

  Addr: 0x0000000000014428  Offset: 0x014428  Link: 4 (.dynstr)
  000000: Rev: 1  Flags: BASE   Index: 1  Cnt: 1  Name: libc.so.6
  0x001c: Rev: 1  Flags: none  Index: 2  Cnt: 1  Name: GLIBC_2.2.5
  0x0038: Rev: 1  Flags: none  Index: 3  Cnt: 2  Name: GLIBC_2.2.6
  0x0054: Parent 1: GLIBC_2.2.5
  0x005c: Rev: 1  Flags: none  Index: 4  Cnt: 2  Name: GLIBC_2.3
  0x0078: Parent 1: GLIBC_2.2.6
  0x0080: Rev: 1  Flags: none  Index: 5  Cnt: 2  Name: GLIBC_2.3.2
  0x009c: Parent 1: GLIBC_2.3
  0x00a4: Rev: 1  Flags: none  Index: 6  Cnt: 2  Name: GLIBC_2.3.3
  0x00c0: Parent 1: GLIBC_2.3.2
  0x00c8: Rev: 1  Flags: none  Index: 7  Cnt: 2  Name: GLIBC_2.3.4
  0x00e4: Parent 1: GLIBC_2.3.3
  0x00ec: Rev: 1  Flags: none  Index: 8  Cnt: 2  Name: GLIBC_PRIVATE
  0x0108: Parent 1: GLIBC_2.3.4

$ readelf -RHEL6机器上的glibc显示,

版本定义部分“ .gnu.version_d”包含17个条目:

  Addr: 0x00000031b2a16eb8  Offset: 0x016eb8  Link: 5 (.dynstr)
  000000: Rev: 1  Flags: BASE   Index: 1  Cnt: 1  Name: libc.so.6
  0x001c: Rev: 1  Flags: none  Index: 2  Cnt: 1  Name: GLIBC_2.2.5
  0x0038: Rev: 1  Flags: none  Index: 3  Cnt: 2  Name: GLIBC_2.2.6
  0x0054: Parent 1: GLIBC_2.2.5
  0x005c: Rev: 1  Flags: none  Index: 4  Cnt: 2  Name: GLIBC_2.3
  0x0078: Parent 1: GLIBC_2.2.6
  0x0080: Rev: 1  Flags: none  Index: 5  Cnt: 2  Name: GLIBC_2.3.2
  0x009c: Parent 1: GLIBC_2.3
  0x00a4: Rev: 1  Flags: none  Index: 6  Cnt: 2  Name: GLIBC_2.3.3
  0x00c0: Parent 1: GLIBC_2.3.2
  0x00c8: Rev: 1  Flags: none  Index: 7  Cnt: 2  Name: GLIBC_2.3.4
  0x00e4: Parent 1: GLIBC_2.3.3
  0x00ec: Rev: 1  Flags: none  Index: 8  Cnt: 2  Name: GLIBC_2.4
  0x0108: Parent 1: GLIBC_2.3.4
  0x0110: Rev: 1  Flags: none  Index: 9  Cnt: 2  Name: GLIBC_2.5
  0x012c: Parent 1: GLIBC_2.4
  0x0134: Rev: 1  Flags: none  Index: 10  Cnt: 2  Name: GLIBC_2.6
  0x0150: Parent 1: GLIBC_2.5
  0x0158: Rev: 1  Flags: none  Index: 11  Cnt: 2  Name: GLIBC_2.7
  0x0174: Parent 1: GLIBC_2.6
  0x017c: Rev: 1  Flags: none  Index: 12  Cnt: 2  Name: GLIBC_2.8
  0x0198: Parent 1: GLIBC_2.7
  0x01a0: Rev: 1  Flags: none  Index: 13  Cnt: 2  Name: GLIBC_2.9
  0x01bc: Parent 1: GLIBC_2.8
  0x01c4: Rev: 1  Flags: none  Index: 14  Cnt: 2  Name: GLIBC_2.10
  0x01e0: Parent 1: GLIBC_2.9
  0x01e8: Rev: 1  Flags: none  Index: 15  Cnt: 2  Name: GLIBC_2.11
  0x0204: Parent 1: GLIBC_2.10
  0x020c: Rev: 1  Flags: none  Index: 16  Cnt: 2  Name: GLIBC_2.12
  0x0228: Parent 1: GLIBC_2.11
  0x0230: Rev: 1  Flags: none  Index: 17  Cnt: 2  Name: GLIBC_PRIVATE
  0x024c: Parent 1: GLIBC_2.12

所以没有办法可以使用GLIBC 2.3.4标头在RHEL6上编译代码。由于我没有使用GLIBC 2.3.4中没有的任何新内容

聚丙烯

让我们确认RHEL上的默认glibc版本。distrowatch对于RHEL:

  • RHEL 4具有glibc 2.3.4
  • RHEL 6具有glibc 2.12

我无法在RHEL4计算机上运行可执行文件。它将引发错误“需要GLIBC 2.7版本”。

从2.3.4开始,glibc中有较新的符号版本,该版本在2.12中,但在2.3.4中不存在。因此,这是预期的,将不起作用。

现在的问题是,RHEL6计算机上的GLIBC 2.7已经支持较早版本,并且具有与较早版本相关的标头。

是。但是当您使用glibc 2.12进行编译时,它可能会使用旧版glibc没有的符号

所以我可以以某种方式告诉我的gcc编译器使用特定的早期版本的gcc来编译代码。

这是编译器-gcc-这就是问题所在。这是glibc库。即使您在使用glibc 2.12的系统上安装了较旧的gcc,仍然会遇到相同的问题。

所以没有办法可以使用GLIBC 2.3.4标头在RHEL6上编译代码。由于我没有使用GLIBC 2.3.4中没有的任何新内容

同样,您要混合很多东西-标题不是问题。它是glibc库,尤其是它使用的较新符号。“您”可能未使用特定于glibc 2.12的任何东西,但较新的符号可能会自动插入。显然,这就是您的情况。

我不确定为什么要这么做。如果您对RHEL 4(glibc 2.3.4)感到满意,那么为什么要对其进行编译并在RHEL 6上使用它-因为较新的glibc将具有较旧的符号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C代码上的“检测到glibc”错误

来自分类Dev

代码块中glibc的静态链接

来自分类Dev

如何使我的ELF同时使用新旧版本的glibc?

来自分类Dev

需要在Wheezy上安装glibc> = 2.14

来自分类Dev

检查实际使用的glibc版本

来自分类Dev

CentOS,使用不同的glibc版本

来自分类Dev

如何使用C预处理程序找到glibc版本?

来自分类Dev

如何安装多个版本的glibc?

来自分类Dev

链接到特定的GLIBC版本

来自分类Dev

ImageMagick:OSError:/lib/libc.so.6:找不到版本'GLIBC_2.XX'

来自分类Dev

从源代码安装glibc-2.14时出错

来自分类Dev

不同版本的RedHat附带哪些glibc版本?

来自分类Dev

用另一个glibc版本编译Apache

来自分类Dev

尝试使用最新的openssl从源代码最新的Apache编译-未定义对符号'dlclose @@ GLIBC_2.2.5'的引用

来自分类Dev

尝试使用最新的openssl从源代码最新的Apache编译-未定义对符号'dlclose @@ GLIBC_2.2.5'的引用

来自分类Dev

由于glibc内存损坏,Xilinx的vhdl代码保险丝编译在debian上失败

来自分类Dev

需要C代码说明

来自分类Dev

如何使用将在python2和python3版本中兼容的六模块迁移代码

来自分类Dev

Glibc编译错误

来自分类Dev

找出glibc编译选项

来自分类Dev

从Java调用C ++,但是Java加载了错误的Glibc版本

来自分类Dev

Linux glibc 2.18及更早版本-漏洞

来自分类Dev

找不到版本“ GLIBC_2.28”

来自分类Dev

找不到版本“ GLIBC_2.33”

来自分类Dev

在debian / apt上安装特定的glibc版本

来自分类Dev

glibc(或libc6)库版本

来自分类Dev

GHOST glibc漏洞(CVE-2015-0235):glibc升级后是否需要重新启动服务器?

来自分类Dev

需要帮助组合 2 个 VBA 代码

来自分类Dev

在Ubuntu 12.04 LTS中将glibc升级到至少2.17或更高版本?

Related 相关文章

热门标签

归档