提问者:小点点

是否可以在没有源的情况下更改cpp程序的libc?


我已经从源代码处构建并安装了另一个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标准库吗?


共1个答案

匿名用户

我推荐阅读

  • 操作系统,三个简单的部分,一本关于操作系统的好教材。
  • 《龙之书》,一本关于编纂者的好教材。
  • Levine's Linkers and Loader书籍。
  • GCC的文档
  • GNU binutils的文档
  • 广发银行的文档

读完以上所有书籍后,请考虑阅读几个Linuxman页面的文档,例如:

  • strace(1)、gcc(1)、ld(1)