我们有一个用 g++ 编译的多线程 c++ 应用程序,在嵌入式 powerpc 上运行。为了在持续集成测试中对此进行内存泄漏测试,我们创建了一个堆分析器,它加载了ld_preload
.
我们希望保证ld_preloaded
模块中的函数在其他任何事情发生之前被调用(包括创建静态对象等......)。更重要的是,我们希望在进程退出之前调用另一个函数,以便堆分析器可以输出其结果。ld_preloaded
我们看到的问题是,在我们的模块中发生任何事情之前,我们的应用程序中的向量是在全局文件范围内创建的。向量的大小在 main 中增长。在关闭时destructor
,我们预加载模块中的函数在向量被销毁之前被调用。
有什么方法可以编写一个预加载的模块来在其他任何事情之前和之后运行一个函数?我们尝试过使用__attribute__((constructor))
但destructor
没有成功。
回到问题标题,我开始怀疑ld
在解析后续模块加载的符号时只查看预加载的模块。它实际上并没有首先加载预加载的模块。任何人都可以为我们阐明这一点吗?