Valgrind 和 LD_PRELOAD - 对象无法预加载
我正在尝试运行我的程序,这需要一个库位于 LD_PRELOAD
环境变量,使用 valgrind。当我这样做时,我得到了 以下错误:
ERROR: ld.so: object '/path/to/lib/libLIBRARY.so' from LD_PRELOAD cannot
be preloaded: ignored.
但是,如果我要不使用 valgrind 运行程序,它会很高兴地使用 LD_PRELOAD
编辑的库。
为什么会这样呢?有办法解决吗?
(PS系统是64位science linux 5,我相信)
I am attempting to run my program, which requires a library to be in theLD_PRELOAD
environment variable, with valgrind. When I do this I get the
following error:
ERROR: ld.so: object '/path/to/lib/libLIBRARY.so' from LD_PRELOAD cannot
be preloaded: ignored.
However, if I am to run the program WITHOUT valgrind, it happily uses theLD_PRELOAD
ed library.
Why is this the case? And is there a way to fix it?
(P.S. The system is 64-bit scientific linux 5, I believe)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果 valgrind 是 64 位,并且共享库和应用程序都是 32 位,则可能会发生这种情况。 valgrind 本身无法加载库,但它应该为应用程序本身加载。
编辑:哦,还有...您确实不应该将 LD_PRELOAD 用于您自己的程序所需的库,而只能用于调试或以其他方式覆盖库。相反,在可执行文件中嵌入 rpath/runpath。
This can happen if valgrind is 64-bit, and both the shared library and the application are 32-bit. valgrind itself can't load the library, but it should load for the application itself.
Edit: Oh, and ... you really shouldn't be using LD_PRELOAD for required libraries for your own programs, only for debugging or otherwise overriding libraries. Instead, embed an rpath/runpath in the executable.