Solaris LIBUMEM:在C应用程序执行子进程时获取“libmapmalloc.so.1未找到”?

Solaris LIBUMEM:在C应用程序执行子进程时获取“libmapmalloc.so.1未找到”?,c,memory-leaks,solaris,libumem,C,Memory Leaks,Solaris,Libumem,我有一个在Linux、Solaris和AIX上运行的C应用程序。我使用了Totalview的MemoryScape等工具来追踪Linux上的内存泄漏,它是100%干净的。但是,我注意到Solaris上有一个小漏洞 所以我一直在Solaris上使用libumem来查找漏洞 我的应用程序要么通过子流程调用调用用户出口,要么不调用 因此,如果我在没有用户出口的情况下运行应用程序,因此没有子进程调用,那么libumem将100%工作……而且我仍然没有看到任何泄漏 LD_PRELOAD=libumem.s

我有一个在Linux、Solaris和AIX上运行的C应用程序。我使用了Totalview的MemoryScape等工具来追踪Linux上的内存泄漏,它是100%干净的。但是,我注意到Solaris上有一个小漏洞

所以我一直在Solaris上使用libumem来查找漏洞

我的应用程序要么通过子流程调用调用用户出口,要么不调用

因此,如果我在没有用户出口的情况下运行应用程序,因此没有子进程调用,那么libumem将100%工作……而且我仍然没有看到任何泄漏

LD_PRELOAD=libumem.so UMEM_DEBUG=audit./myapplication config.ini

但是,当我打开user exits调用以便主应用程序调用子进程时,我会在运行时将以下内容由子进程打印到STDOUT:

ld.so.1:userexit_proxy:fatal:libmapmalloc.so.1:没有这样的文件或目录

请注意,如果我不使用libumem,那么应用程序将100%运行……只是一个微小的内存泄漏

现在我的应用程序是用64位编译的,我注意到/usr/lib/libmapmalloc.so.1是32位的,但这不会有什么区别

知道如何在同时调用子流程的应用程序上使用libumem吗

注意:我也尝试将变量导出到整个环境中,但仍然没有成功

导出LD_PRELOAD=libumem.so 导出UMEM_调试=审核

另外,如果我错了,请纠正我,但如果子进程完成,则该子进程中的任何泄漏内存都将自动释放,对吗?所以我可以假设Solaris上没有来自子进程调用的泄漏

在这方面的任何帮助都将不胜感激

谢谢你的帮助


Lynton

当dlopen成功查看此邮件时,当使用Dleror的代码错误地假定它返回非null值时,已观察到此行为:。我将首先跟踪您的应用程序,看看这些函数是否被调用以及如何调用

/usr/lib/libmapmalloc.so.1是indeed32位的,但如果您的应用程序是64位的,它会使用类似于/usr/lib/amd64/libmapmalloc.so或类似的内容

您正确地指出,当子进程结束时,其所有内存分配都将被释放