我已经从源代码处构建并安装了另一个glibc,并且我想让现有的用C++编写的可执行文件与自定义glibc一起运行,以供实验之用。为了做到这一点,我尝试更改可执行文件的加载程序。首先,在/lib64下创建了一个名为ld_linux-x86-64.so.2
的链接,其路径指向新的加载程序
sudo ln /home/ubuntu/glibc-2.27-amd64/lib/ld-2.27.so /lib64/ld_linux-x86-64.so.2
其次,通过文本编辑器修改了可执行文件中的加载器路径,将“/lib64/ld-linux-x86-64.so.2”更改为“/lib64/ld_linux-x86-64.so.2”。我启动了可执行文件,并得到以下错误:
./demo_cpp: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
打了补丁的cpp程序无法运行,似乎缺少C++标准库。然而,这种方法对纯C编写的程序确实有效。使用这里提到的方法,我尝试了以下命令,得到了完全相同的错误:
patchelf --set-interpreter /home/ubuntu/glibc-2.27-amd64/lib/ld-linux-x86-64.so.2 --set-rpath /home/ubuntu/glibc-2.27-amd64/lib demo_cpp
所以我想知道是否可以为一个cpp程序更改glibc?我也需要从源代码处构建cpp标准库吗?
我推荐阅读
读完以上所有书籍后,请考虑阅读几个Linuxman
页面的文档,例如: