gpt4 book ai didi

c++ - tcmalloc:静态编译时如何覆盖我的 malloc 调用?

转载 作者:可可西里 更新时间:2023-11-01 17:36:27 65 4
gpt4 key购买 nike

当我使用 LD_PRELOAD=/usr/local/lib/libtcmalloc.so 时,我对 malloc 的所有调用都变成了 tcmalloc 调用。但是,当我静态链接到 libtcmalloc 时,我发现直接调用 malloc,除非我仍然使用 LD_PRELOAD 设置。

那么我如何以我的 mallocs 挂接到 tcmalloc 的方式针对 tcmalloc 进行静态编译?

注意事项:

  • 我使用了很多 C++ new 等等,所以只需将 malloc 定义为 tcmalloc行不通
  • 可能我必须使用malloc_hook 自己,但我会我以为我可以让 tcmalloc 去做对我来说,因为它显然正在这样做动态链接时

最佳答案

符号在第一次匹配的基础上解析。您需要确保链接器在 libc.a 之前搜索 libtcmalloc.a。我假设您没有明确链接 libc.a,因为您通常不需要这样做。解决方案是指定 -nostdlibs,然后按照您希望搜索它们的顺序显式链接所有必需的库。通常是这样的:

-nostdlibs -llibtcmalloc -llibm -llibc -llibgcc

另一个可能更简单的解决方案是链接解析 tcmalloc 所需的目标文件而不是静态库,因为在解析符号时目标文件优先于库。

关于c++ - tcmalloc:静态编译时如何覆盖我的 malloc 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1553435/

65 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com