当前位置: 首页 > 知识库问答 >
问题:

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

公冶伟
2023-03-14

我已经从源代码处构建并安装了另一个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个答案

燕智
2023-03-14

我推荐阅读

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

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

  • strace(1)、gcc(1)、ld(1)
 类似资料:
  • 是否可以在没有实体的情况下使用JpaRepository?在这种情况下,将其替换为DTO。 如下示例所示 这种情况有替代方案吗? 注意:DTO已经映射,但我不想创建视图来将此DTO转换为实体。 我已经验证了这个主题,但没有重大进展,请使用无实体的JpaRepository交互样式 我在试这个 接口- 公共接口BffDTOInterface2{ } 我有这个错误

  • 问题内容: 我们正在考虑将生产服务器从Ubuntu- Desktop 10.04 升级到Ubuntu- Server 12.04。 我们在当前的桌面操作系统上运行着各种服务,例如Selenium Web Driver。我的问题是Selenium Web Driver是否可以从基于cli的系统中运行? 我立即想到的是,它不能,因为它依赖Firefox,但我希望有人证明我做错了! 问题答案: 您正在寻

  • 我想使用并使其直接进入给定的url,而不是从ribbon配置中获取主机。 我知道在Spring,cloud-feign默认与ribbon和eureka一起出现。 根据这个:https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html#spring-cloud-ribbon-without-eure

  • 我在网站上做了一个小研究,并在这个网站上回顾了相关主题,但答案是矛盾的:有人说这是不可能的,有人说这是可能的,但很危险。 目标是传递匿名类的对象作为RMI方法的参数。由于RMI要求,这个类必须是可序列化的。这里没有问题,很容易使类序列化。 但是我们知道内部类的实例包含对外部类的引用(匿名类是内部类)。因此,当我们序列化内部类的实例时,外部类的实例也被序列化为一个字段。问题来了:外部类是不可序列化的

  • 在Spring Boot的文档中,我只找到了使用Redis会话的例子,不使用Redis也能使用它吗?

  • 问题内容: 有关一些背景知识和参考,以下是一些Heroku文档页面的一些报价。 从Heroku Node.js支持>激活中: 当应用程序的根目录中有文件时,将使用Heroku Node.js buildpack 。 从Heroku Node.js支持>默认Web进程类型: 首先,Heroku寻找一个Procfile来指定您的进程类型。 如果在构建过程中应用程序的根目录中没有任何内容,则将通过运行[