C 如何不对所有链接库使用-wrap?

C 如何不对所有链接库使用-wrap?,c,gcc,linker,C,Gcc,Linker,我的程序使用了几个预编译的静态库。我包装malloc和free,但我希望其中一个链接库使用'real'malloc和free。 当我跑步时: gcc[…]-W1,--wrap=malloc-W1,--wrap=free[已用库] 所有库都将使用包装函数 部分链接是一种方式吗?如果我动态链接这个库呢 提前感谢,, Jacek您应该能够通过在二进制静态库上使用一些elf技巧来实现这一点 假设您的库名为libbar.a。然后,您可以在objcopy的帮助下,将对malloc()的所有调用更改为\uu

我的程序使用了几个预编译的静态库。我包装malloc和free,但我希望其中一个链接库使用'real'malloc和free。 当我跑步时:

gcc[…]-W1,--wrap=malloc-W1,--wrap=free[已用库]

所有库都将使用包装函数

部分链接是一种方式吗?如果我动态链接这个库呢

提前感谢,,
Jacek

您应该能够通过在二进制静态库上使用一些elf技巧来实现这一点

假设您的库名为
libbar.a
。然后,您可以在
objcopy
的帮助下,将对
malloc()
的所有调用更改为
\uu real\u malloc()

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

现在,如果你链接复制的(修改的)
libbar2.a
而不是
libbar.a
,那么应该调用原始的(未包装的)
malloc()
free()

你不能在那一个库中调用
\ureal\umalloc()
吗?不,正如我写的,它是预编译的。我的意思是,它是第三方。抱歉搞混了,太棒了!虽然我希望有更“干净”的方式,所以在阅读我的makefile时没有人中风