2011-08-12 45 views
4

我试图运行我的程序,它需要使用valgrind的库中的库位于 LD_PRELOAD环境变量中。当我这样做,我得到了 以下错误:Valgrind和LD_PRELOAD - 无法预装对象

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

但是,如果我要运行程序WITHOUT Valgrind的,它高兴地使用 LD_PRELOAD版库。

为什么会出现这种情况?有没有办法解决它?

(P.S.该系统是64位Linux的科学5,相信)

+0

当遵循这个简单的教程http://www.jayconrod.com/cgi/view_post.py?23时,我遇到了同样的问题。我也是64位。一切(例如jmaloc和hello app我自己编译,所以它是64位 - >用“文件”检查) –

+0

任何解决方案? –

+0

查看环境变量['LD_DEBUG'](http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html)。具体地说,尝试'export LD_DEBUG = all'。 –

回答

1

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

编辑:哦,你真的不应该使用LD_PRELOAD作为你自己的程序所需的库,只能用于调试或重写库。相反,在可执行文件中嵌入一个rpath/runpath。

+0

在您使用共享对象后,valgrind会丢失很多符号,所以这是唯一的解决方法。但不幸的是,它不能与64位valgrind一起工作,因为我们看到 – newhouse

+0

@newhouse咦?一般而言,'dlclose'是个不错的主意,但我不明白这里的相关内容。 – o11c