我需要将调用包装到malloc,从我自己的池中提供内存。 但仅适用于我自己的目标文件和一些外部库。 其他库应该可以访问真正的malloc。 我使用静态链接,只链接到静态库(.a档案)。
我使用--wrap = malloc选项来"拦截"调用malloc,但它使所有输入文件中的所有代码都使用此malloc(__wrap_malloc)。
理想的解决方案是,如果我可以使用--wrap链接器选项,但只将其应用于某些输入文件。但也欢迎其他解决方案。
如果需要说明问题,我可以提供虚拟示例代码(不是那么小)。
有什么想法吗?
由于
答案 0 :(得分:2)
尝试分两步进行链接。
第一阶段:ld -r -o libwrapped.a --wrap=malloc myobj1.o myobj2.o -lsomelib
第二阶段:ld -o final -lwrapped -lsomeotherlib
-r
选项使第一个文件(wrapped
)可重定位,通常称为部分链接。基本上你创建了一个包含你想要包装的所有对象的库,然后将它与你不想包装的对象链接到最终对象中。
答案 1 :(得分:0)
如果您只需要为某些模块甚至部分模块更改malloc,我建议使用简单的#define
。这允许将新malloc的使用限制在同一模块的某些部分:
...
#define malloc(x) MyMalloc(x)
... //From here on will be used the new malloc MyMalloc
#undef malloc
... //From here on will be used the standard malloc