【问题标题】:Valgrind and LD_PRELOAD - object cannot be preloadedValgrind 和 LD_PRELOAD - 无法预加载对象
【发布时间】:2011-08-12 21:41:46
【问题描述】:

我正在尝试运行我的程序,该程序需要一个库位于 LD_PRELOAD 环境变量,带有 valgrind。当我这样做时,我得到 以下错误:

ERROR: ld.so: object '/path/to/lib/libLIBRARY.so' from LD_PRELOAD cannot
be preloaded: ignored.

但是,如果我要运行程序 不使用 valgrind,它会很高兴地使用 LD_PRELOADed 图书馆。

为什么会这样?有没有办法解决它?

(P.S.系统是64位的scientific linux 5,我相信)

【问题讨论】:

  • 我在遵循这个简单的教程jayconrod.com/cgi/view_post.py?23 时遇到了同样的问题。我也是64位的。一切(例如我自己编译的 jmaloc 和 hello 应用程序,所以它是 64 位 -> 用“文件”检查)
  • 任何解决方案?我自己也遇到了这个问题..
  • 查看环境变量LD_DEBUG。具体试试export LD_DEBUG=all

标签: linux valgrind ld


【解决方案1】:

如果 valgrind 是 64 位,并且共享库和应用程序都是 32 位,则可能会发生这种情况。 valgrind 本身无法加载库,但它应该为应用程序本身加载。

编辑:哦,而且......你真的不应该将 LD_PRELOAD 用于你自己的程序所需的库,只用于调试或以其他方式覆盖库。相反,在可执行文件中嵌入 rpath/runpath。

【讨论】:

  • valgrind 在您 dlclose'd 共享对象后会丢失很多符号,因此这是唯一的好解决方法。但不幸的是,正如我们所见,它不适用于 64 位 valgrind
  • @newhouse 嗯? dlclose 总的来说是个坏主意,但我不明白这与这里有什么关系。
猜你喜欢
  • 2013-07-17
  • 2019-05-18
  • 2012-01-18
  • 2016-02-26
  • 2019-11-19
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多