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