Valgrind 和 LD_PRELOAD - 对象无法预加载

发布于 2024-11-29 06:13:16 字数 360 浏览 2 评论 0原文

我正在尝试运行我的程序,这需要一个库位于 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 the
LD_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 the
LD_PRELOADed 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

‘画卷フ 2024-12-06 06:13:16

如果 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文