c - 如何不对所有链接库使用 -wrap?
问题描述
我的程序使用了几个预编译的静态库。我包装了 malloc 和 free,但我希望链接库之一使用“真正的”malloc 和 free。当我运行时:
gcc [...] -W1, --wrap=malloc -W1, --wrap=free [used libraries]
所有库都将使用包装函数。
部分链接在这里是一种方式吗?如果我动态链接这个库怎么办?
提前致谢, 雅克
解决方案
您应该能够通过二进制静态库上的一些小精灵技巧来实现这一点。
假设您的库被称为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()
应该被调用。
推荐阅读
- amazon-web-services - 计划任务上的 ECS curl 运行状况检查
- c# - Linq Join 与 GroupBy 和 Sum
- metal - 使用 Metal Performance Shaders 计算 SVD
- python-3.x - 使用诗歌添加 networkx cmd 获取 SSLError
- amazon-sagemaker - 超出 SageMaker Studio 的 ThrottlingException 率
- reactjs - 从反应原生的 API 的多个页面中获取数据
- python - 从 Azure Blob 高效地将数据 (requests.put) 上传到 REST API
- android - React native Android - 使用非生物识别设备的 PIN、图案或密码等锁屏凭据进行身份验证
- r - robustlmm 函数 rlmer() 太慢了
- objectify - Objectify 中的会话缓存不会针对实体的更新而更新。它只返回过时的数据