2014-06-10 38 views
1

我有一个库调用函数:例如malloc。 我在我的应用程序中使用库。我希望库不要调用malloc,而是每次调用malloc时定义“mymalloc”的函数。 总之,我想用一个不同名称的符号来解析malloc符号。函数名别名

我已经试过此链接器选项:-Wl, - defsym = malloc的= mymalloc

和它的作品,但只是对于那些在应用 即来电:在节目中的malloc每次调用解析mymalloc,但库中的调用仍然调用stdlibc malloc。

非常感谢, 达维德

+0

可行性取决于它是编译的库还是仅包含标题的库。它是什么? – stefan

+1

为什么你不能只调用你的函数'malloc'?或者写一个'malloc'来代表'mymalloc'?您可能还需要替换'calloc','realloc','memalign'和'free'(根据https://sourceware.org/ml/libc-help/2012-04/msg00060.html) – davmac

+0

试试看你的'malloc'库的实现。一些库允许你勾选memoery分配并提供你自己的自定义分配器。如果你的支持,你可以得到你想要的结果,而不会在链接器中产生任何黑客行为。 :http://linux.die.net/man/3/malloc_hook – Will

回答

0

这是原油,但你可以使用预处理器 - 的优点在于,预处理器在编译之前运行:

#define malloc mymalloc

你将不得不#include的包含mymalloc之前之前的任何标准库的声明。

您还必须自己重新编译任何编译库。实际上,我建议在生产中这样做:我认为代码会很脆弱,并且可能存在潜伏在各个角落的潜在错误mallocs

+1

你可能想说“实际上我建议**反对**在生产中这样做” – stefan