有没有一种简单的方法来安装 glibc 的二进制版本?

slm*_*slm 13 libraries glibc

我一次又一次地看到这样的问题:

这些是我们通常推动的解决方案类型:

这真的是我们能做的最好的吗?难道没有 GLIBC 的二进制版本,我们可以简单地将其解压缩到一个目录中,例如/opt/myglibc,然后设置$LD_LIBRARY_PATH或运行我们想要的任何应用程序,而不会出现任何问题?

似乎需要 GLIBC 2.14 的应用程序,例如较新版本的 Chrome (28+)?

注意:这个主题为:Google Chrome 29 Released – Install on RHEL/CentOS 6 and Fedora 19/15 on tecmint.com 最终让我想到了这个。

参考

Ban*_*uin 2

如果它是任何其他库,但 glibc ...我想不可能有快速的方法,因为 glibc 是东西“硬编码”的地方。glibc 适合您的内核版本,并且它的加载程序是实际上对LD_LIBRARY_PATH.

也许正确的方法是:

LD_LIBRARY_PATH="/opt/myglibc/;..." /opt/myglibc/ld-linux.so.2 the_program`
Run Code Online (Sandbox Code Playgroud)

但不确定这是否有效。

无论如何,我认为使用替代的 glibc 需要一个尚未实现的框架,因为搜索路径有时是有线的,并且 glibc 总是必须适合您的操作系统/内核,所以不能有通用的二进制文件,IMO。Debian 的多架构表明这并不简单,但仍然可以完成。除了目标体系结构之外,如果还有其他一些方法来识别库。

该网站刚刚给了我另一个相关主题:

在那里,接受的答案包括一个名为rtldi的程序的链接,该程序似乎解决了 glibc 问题。它是 2004 年的版本,因此可能无法再直接从链接器中运行,但也许值得研究一下。其来源是 GPLv2。

耶和华,耶和华

我的一个朋友曾经提出过这样的想法:共享库的实际使用被高估了。他确实有一个观点:共享库很好,不会用重复项填满计算机的内存,但考虑到单个应用程序实例,这只有几 MB。

只有少数应用程序我们会采取一些措施,例如为它们提供自己的 glibc。为了节省我们冗长的分析,我们将它们称为“立即应用程序”,从完成工作的意义上来说,它们本身是有用的。例如,网络浏览器、邮件用户代理、办公套装和音乐播放器允许用户获得他们想要的东西,并且每个用户只有几个实例。从另一方面来说,系统服务、窗口管理器、甚至整个桌面环境都非常重要,但仅仅是支持性的,而且往往还不够罕见或关键,因此人们愿意给他们自己的 glibc。

“即时应用程序”的数量相当小,绝对是每个用户的数量,并且与当今产生的“基本”操作系统和桌面环境相比是相对较小的。如果像 Chrome、Firefox 这样的直接应用程序是静态编译的,那么平均系统的额外内存需求将是几百MB。这个论点在当今的许多 GB 系统上并没有多大意义,因此直接应用程序的静态链接可能是一种选择。

还有交换空间和 SSD 的概念,它们允许极快的换入/换出,这也有助于处理增加的内存需求。

这里讨论的 glibc 问题并没有通过静态链接得到真正解决,但是对于像 Web 浏览器这样的应用程序来说,一种自包含的分发格式是可以想象的,其中 X 协议、一些声音守护程序和一些内核方法作为唯一的接口。优点是库版本不兼容的情况更少。

  • *“我们在这里讨论的是几个 100MB”* 呃,**不。** 虽然库本身的体积可能没有那么多(但可能比 100MB 多一个或两个数量级 - 尝试` du -h /lib`),请记住,如果这些是静态编译的,*每个使用它们编译的应用程序都需要一定数量的 RAM。您有两个应用程序使用相同的库堆栈,现在您需要两倍的内存。三个应用程序?是原来的三倍。更不用说它会在很大程度上抵消缓存的好处...... (2认同)
  • ...当然,你不能只缓存 glibc —— 你必须缓存每个正在运行的应用程序的副本(==荒谬)。简而言之,如果没有共享对象等现代技术,现代操作系统在现代硬件上将是简单明了的“完全不可能”。您不需要多一点内存——您需要 10 或 100 倍的内存。 (2认同)