首页 > 解决方案 > 如何不对所有链接库使用 -wrap?

问题描述

我的程序使用了几个预编译的静态库。我包装了 malloc 和 free,但我希望链接库之一使用“真正的”malloc 和 free。当我运行时:

gcc [...] -W1, --wrap=malloc -W1, --wrap=free [used libraries]

所有库都将使用包装函数。

部分链接在这里是一种方式吗?如果我动态链接这个库怎么办?

提前致谢, 雅克

标签: cgcclinker

解决方案


您应该能够通过二进制静态库上的一些小精灵技巧来实现这一点。

假设您的库被称为libbar.a. 然后,您可以在以下帮助下将所有调用更改malloc()为:__real_malloc()objcopy

objcopy libbar.a --redefine-sym malloc=__real_malloc --redefine-sym free=__real_free libbar2.a

现在,如果您链​​接复制的(修改的)libbar2.a而不是libbar.a原始的(未包装的)malloc()并且free()应该被调用。


推荐阅读