我们的计算集群运行的CentOS版本非常旧,带有旧的内核(2.6.18),当然还有旧的库和二进制文件。因为更新整个事情需要在所有节点上进行大量工作,所以这不是一个选择。
我正在尝试编译和使用需要C++11
(因此需要更高版本的gcc
(和/或clang
)版本)的程序。因为我根本不想弄乱系统,所以我想以某些本地目录树中的非root用户身份进行操作。
问题是,这gcc
需要glibc
比机器上存在的机器更新的机器。因此,我需要保持一个独立的,新版本glibc
在我的本地lib/
所描述的树,可能是在这里。
我迷路的地方是如何将本地库的路径“硬编码”为所有所需的二进制文件,例如gcc
,g++
等等。将LD_LIBRARY_PATH设置为我的本地lib/
树会导致所有系统二进制文件不再起作用(ELF file OS ABI invalid
),因为它们要使用尚未针对其编译的new libm.so
/ libc.so
。
所以,把它包起来:什么是保持一个较新的,局部的开发堆栈(含适当的方式glibc
,gcc
并行等)旧系统没有乱搞的根源?
附带提出一个问题:设置LD_LIBRARY_PATH作为SE的解决方案发布到整个SE上glibc
。对我来说,当我尝试执行任何系统二进制文件(如ls
)时,都会导致上述错误。怎么来的?我做错了什么还是预期的行为?