问题描述
请考虑以下内容: 我有一个C ++文件。我使用RHEL6机器来编译我的代码。但我希望我的可执行文件/二进制文件也能够在RHEL4上运行。 现在我经历了以下3种情况-
- 如果我在gcc版本4.4.7的RHEL6上编译了一个简单的c ++文件,则无法在RHEL4机器上执行它。错误是
加载共享库时出现错误:需要glibc 2.5或更高版本 动态链接器
对此的解决方案在gcc: Reduce libc required version中给出。修复之后,我可以在RHEL4上运行二进制文件。
-
如果我使用静态库进行编译(在具有相同gcc版本的RHEL6上), 我可以在RHEL4机器上执行它。不需要像情况1那样使用
-Wl,--hash-style=both
。 -
如果我在RHEL6上编译项目(而不是单个文件),则在RHEL4平台上运行二进制文件时会收到以下错误。
/lib64/libc.so.6:未找到版本“ GLIBC_2.7”
我的问题是:
a)在静态链接库的情况下为什么没有错误。
b)情况1和情况3产生的错误有什么区别?
解决方法
- 无法用于该链接器,默认库和动态链接。 3.静态链接将代码从库中复制到可执行文件中,并且无论该可执行文件在哪里,它们都可以稳定地工作。动态链接可能有点麻烦,因为在运行时在动态库搜索路径中具有相同的库和库版本,而在运行时却使代码不完整。