linux - Valgrind 和 LD_PRELOAD - 无法预加载对象

标签 linux valgrind ld

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

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

但是,如果我要运行程序WITHOUT valgrind,它很乐意使用 LD_PRELOADed 库。

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

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

最佳答案

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

编辑:哦,还有...您真的不应该将 LD_PRELOAD 用于您自己的程序所需的库,仅用于调试或覆盖库。相反,在可执行文件中嵌入一个 rpath/runpath。

关于linux - Valgrind 和 LD_PRELOAD - 无法预加载对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046622/

相关文章:

linux - Bluez D 总线, "StartNotify"与 "AcquireNotify"

php - ssh 连接在 php 中不起作用

c - 如何纠正 valgrind 错误?

c - "Invalid write of size 1"和指针具有正确的内存地址,但仍然会抛出错误

c++ - 在 Windows 上为 Linux 交叉编译(链接器输出文件不会在 Linux 上作为可执行文件运行并且具有 undefined symbol )

linker - 如何告诉/强制 GNU ld 将节/符号放在输出 ELF 文件的特定部分中?

c++ - GDB:如何在调试期间检查当前行号

ubuntu - 对文件的 Valgrind 权限被拒绝

c++ - G++ 找不到 boost 库

linux - 如何在 linux 服务器上使用 pm2 运行 asp.net core 应用程序