【发布时间】: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? -
由于
libA和libB已经编译,它们包含对CRT的内存例程的直接调用。你不能覆盖它。您需要重新编译libA并使用重载/#define/delegate。 -
你不会自己编译库。这是两个不相互依赖的第三方库。只是 main.o 取决于它们。
-
@MateuszGrzejek 如果我不为他们两个都打包对 malloc 的调用,那将很容易。无需重新编译。我会编辑帖子。