C 如何不对所有链接库使用-wrap?
我的程序使用了几个预编译的静态库。我包装malloc和free,但我希望其中一个链接库使用'real'malloc和free。 当我跑步时: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
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时没有人中风