【问题标题】:Function name aliasing函数名别名
【发布时间】:2014-06-10 09:10:32
【问题描述】:

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

我已经尝试过这个链接器选项:-Wl,--defsym=malloc=mymalloc

它有效,但仅适用于应用程序中的调用 即:程序中对 malloc 的每次调用都会解析为 mymalloc,但库中的调用仍会调用 stdlibc malloc。

非常感谢, 大卫

【问题讨论】:

  • 可行性取决于它是编译库还是仅标头库。这是什么?
  • 为什么不能直接调用你的函数malloc?还是写一个malloc 委托给mymalloc?您可能还需要替换callocreallocmemalignfree(根据sourceware.org/ml/libc-help/2012-04/msg00060.html
  • 尝试查看您的 malloc 库的实现。一些库允许您挂钩内存分配并提供您自己的自定义分配器。如果您的支持这一点,您可以获得所需的结果,而无需在链接器中进行任何黑客攻击。 :linux.die.net/man/3/malloc_hook

标签: c++ c function alias


【解决方案1】:

这是粗略的,但您可以使用预处理器 - 优点是预处理器在编译之前运行:

#define malloc mymalloc

您必须#include 包含mymalloc 声明的文件任何标准库包含之前。

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

【讨论】:

  • 您可能想说“实际上我建议反对在生产中这样做”
猜你喜欢
  • 2018-08-19
  • 2010-09-13
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 2012-10-30
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多