动态编译而不是静态编译的c ++二进制文件时出现glibc错误

问题描述

请考虑以下内容: 我有一个C ++文件。我使用RHEL6机器来编译我的代码。但我希望我的可执行文件/二进制文件也能够在RHEL4上运行。 现在我经历了以下3种情况-

  1. 如果我在gcc版本4.4.7的RHEL6上编译了一个简单的c ++文件,则无法在RHEL4机器上执行它。错误是
加载共享库时出现

错误:需要glibc 2.5或更高版本 动态链接器

对此的解决方案在gcc: Reduce libc required version中给出。修复之后,我可以在RHEL4上运行二进制文件。

  1. 如果我使用静态库进行编译(在具有相同gcc版本的RHEL6上), 我可以在RHEL4机器上执行它。不需要像情况1那样使用-Wl,--hash-style=both

  2. 如果我在RHEL6上编译项目(而不是单个文件),则在RHEL4平台上运行二进制文件时会收到以下错误。

/lib64/libc.so.6:未找到版本“ GLIBC_2.7”

我的问题是:

a)在静态链接库的情况下为什么没有错误。

b)情况1和情况3产生的错误有什么区别?

解决方法

  1. 无法用于该链接器,默认库和动态链接。 3.静态链接将代码从库中复制到可执行文件中,并且无论该可执行文件在哪里,它们都可以稳定地工作。动态链接可能有点麻烦,因为在运行时在动态库搜索路径中具有相同的库和库版本,而在运行时却使代码不完整。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...