Linux 运行在这里编译的C程序会导致另一台服务器上出现GLIBC library not found错误-是我的错还是他们的错?

Linux 运行在这里编译的C程序会导致另一台服务器上出现GLIBC library not found错误-是我的错还是他们的错?,linux,ubuntu,glibc,Linux,Ubuntu,Glibc,这里编译的C程序在我们的Ubuntu服务器上运行良好。但当其他人尝试在其特定的Linux服务器上运行时,他们会出现以下错误: ./myprog-install: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./myprog-install) ./myprog-install: /lib/tls/libc.so.6: version `GLIBC_2.7' not found (required by ./mypro

这里编译的C程序在我们的Ubuntu服务器上运行良好。但当其他人尝试在其特定的Linux服务器上运行时,他们会出现以下错误:

./myprog-install: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./myprog-install)
./myprog-install: /lib/tls/libc.so.6: version `GLIBC_2.7' not found (required by ./myprog-install)
我需要升级我们的glibc库并重新编译吗?或者他们的服务器上缺少什么

如果我运行apt cache show libc6,我的Ubuntu会告诉我版本是:

Package: libc6
Priority: required
Section: libs
Installed-Size: 9368
Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
Architecture: i386
Source: eglibc
Version: 2.11.1-0ubuntu7.10
包:libc6
优先权:必选
章节:libs
安装尺寸:9368
维护者:Ubuntu核心开发者
原始维护者:GNU Libc维护者
架构:i386
资料来源:eglibc
版本:2.11.1-0ubuntu7.10
如果我看一下,当前版本似乎是2.7-10ubuntu8.1

这些数字把我弄糊涂了。一方面,2.11-1-0比2.7-11更高。另一方面,7.10比8.1低


你认为这只是我升级C库包并重新编译的问题吗?或者是其他人的服务器缺少一些兼容性所需的库?

您是根据一个太新的glibc版本构建的。根据较旧版本的glibc构建它,最好是他们正在使用的版本。

您已经在glibc-2.11系统上构建了它。您正在尝试在具有glibc-2.3或更高版本的系统上运行。那是行不通的

这只是我升级C库包的问题吗

否:升级glibc只会让事情变得更糟

您可能希望尝试列出的解决方案

这是不是我们可以合理地要求另一方升级他们的系统以支持,而不是降级我们的编译器

通常情况下,客户端会强烈抵制升级系统的请求:对他们来说,系统正常工作,任何升级都可能破坏其他现有应用程序

如果您计划在Linux上分发二进制文件(而不是在目标系统上构建二进制文件),那么您需要学习如何制作可以在任何地方运行的二进制文件,或者您需要说明您的要求(最低内核和libc版本等),并拒绝无法满足这些要求的客户端

更新:

为什么他们会犯两个错误。为什么他们不为GLIBC_2.11.1买一个,这显然是我用它构建的

符号版本控制不是这样工作的

引入新符号时,它将标记为当前的libc版本,例如
readdir64@@GLIBC_2.2
posix_spawn@@GLIBC_2.15
,等等

当您链接使用上述两种符号的程序,并尝试在例如glibc-2.1系统上运行该程序时,会出现两个错误

但是如果你链接了一个不使用上述任何符号的程序,例如

int main() { return 0; }
然后,您的程序将无任何错误地运行

更新2:

他们不必在Linux系统中同时添加GLIBC_2.4和GLIBC2.7,是吗


不,他们没有。
GLIBC_2.11
将包含前面的所有符号。事实上,即使他们愿意,也无法同时安装glibc-2.4和2.7:同时安装多个版本是相当困难的,而且不可能在默认位置安装多个版本。

哦,我明白了。由于错误消息本身,未找到有关GLIBC_2.4和GLIBC_2.7的信息。Duh.)我将查看链接中推荐的解决方案。这是不是我们可以合理地要求另一方升级他们的系统以支持,而不是降级我们的编译器?谢谢这是一个有趣的困境。据推测,较新的glibc版本是对旧版本的改进——更快、更少的bug,等等。我讨厌维护多个版本。而且我也不愿意发布一些针对最小公分母的东西,这样可能会降低性能。更不用说重新测试旧库的所有功能了。这不是一个大众市场的应用程序,因此在这种情况下,也许可以要求客户机升级到Linux版本,在该版本中,应用程序已经过全面测试。否则很难提供适当的支持。谢谢如果有人看到这个,我有一个快速跟进的问题!为什么用户会收到两条错误消息:一条用于GLIBC_2.4,另一条用于GLIBC_2.7。为什么他们不为GLIBC_2.11.1买一个,这显然是我用它构建的?谢谢多谢你的进一步回复。我不太了解这个系统,但如果我在这里回复你,你会看到它。不过我没有收到任何通知,所以请稍后再查看。无论如何我不好意思说我不完全理解你的答案。但是,如果用户将其库升级到GLIBC_2.11.1或更高版本,通过向后兼容,是否可以避免他们同时看到这两个错误?换句话说,他们不必在Linux系统中同时添加GLIBC_2.4和GLIBC2.7,是吗?再次感谢,再次感谢。我现在明白了。非常感谢。你可能想问这个,或者看看这个相关的问题。但如何与旧版本的glibc相链接?我需要安装旧版本的glibc吗?不同版本的glibc能否在同一个系统中共存?