【问题标题】:Wrap calls to malloc for third party library libA.a, but not for libB.a包装第三方库 libA.a 的 malloc 调用,但不适用于 libB.a
【发布时间】:2015-07-30 14:15:52
【问题描述】:

假设您有目标文件 main.o 和两个外部第三方静态库 libA.a 和 libB.b。你想把它们联系在一起。但是您想包装从 libA.a 对 malloc 的调用(将 malloc 替换为您自己的),但不适用于 libB.a。

你会怎么做?

这是一个有趣的问题,但它可以解决吗?

(为了更有趣,假设它是 c 和 c++ 代码的混合:))

编辑 1:

为了让事情更清楚。我将向您展示如何为这两个库完成此操作:

gcc -static -Wl,--wrap=malloc -o main.out main.o mem.o -lA -lB

这里的 mem.o 文件包含函数 __wrap_malloc 的代码。但这将导致两个库都使用自定义 malloc。 问题是,如何让它只对其中一个起作用?

【问题讨论】:

  • 由于库是单独编译的,我想这不会有任何问题。
  • 如果libA存储通过函数指针调用一个函数,该指针指向libB中的一个函数,而该函数调用malloc
  • 由于libAlibB 已经编译,它们包含对CRT 的内存例程的直接调用。你不能覆盖它。您需要重新编译 libA 并使用重载/#define/delegate。
  • 你不会自己编译库。这是两个不相互依赖的第三方库。只是 main.o 取决于它们。
  • @MateuszGrzejek 如果我不为他们两个都打包对 malloc 的调用,那将很容易。无需重新编译。我会编辑帖子。

标签: c++ c unix linker


【解决方案1】:

我的另一个问题得到了一个很好的答案,更具体。

Wrap malloc but only for some of input files (object and lib)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 2010-11-02
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2023-01-11
    • 2016-09-09
    • 1970-01-01
    相关资源
    最近更新 更多