我需要包装调用malloc,从我自己的池提供内存。但只适用于我自己的目标文件,以及一些外部库。其他库应该可以访问真正的malloc。我使用静态链接,并且只链接到静态库()。档案)。
我使用——wrap=malloc选项来"拦截"对malloc的调用,但它使所有输入文件中的所有代码都使用这个malloc (__wrap_malloc)。
理想的解决方案是,如果我可以使用——wrap链接器选项,但只对一些输入文件应用它。但也欢迎其他解决方案。
如果需要说明问题,我可以提供虚拟示例代码(不是那么小)。
任何想法?
谢谢
试试分两步链接。
第一阶段:ld -r -o libwrapped.a --wrap=malloc myobj1.o myobj2.o -lsomelib
ld -o final -lwrapped -lsomeotherlib
-r
选项使第一个文件(wrapped
)可重定位,通常称为部分链接。基本上,你创建一个库,包含所有你想要包装的对象,然后将其与你不想要包装的对象链接到最终对象中。
如果您只需要更改一些模块的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