【问题标题】:Why does tcmalloc fail when I compile and run this program with a shared library?当我使用共享库编译和运行此程序时,为什么 tcmalloc 会失败?
【发布时间】:2015-09-19 00:07:03
【问题描述】:

代码类似于此处的代码: Why tcmalloc don't print function name, which provided via dlopen

制作文件:

  • 全部:
  • g++ -fPIC -g -c shared.cpp -ltcmalloc
  • g++ -shared -o shared_libs/libshared.so -g shared.o -ltcmalloc
  • g++ -L shared_libs/ -g main.cpp -ldl -ltcmalloc

当我执行我的程序时:

$ HEAPCHECK=normal ./a.out
No live heap object at 0x2582aa0 to ignore
Check failed: heap_profile->FindAlloc(test_str, &size): our own new/delete not linked?
Aborted (core dumped)

带有核心文件的 gdb 说:

Core was generated by `./a.out'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00007f51bfef6cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
Traceback (most recent call last):
  File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
    from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'

【问题讨论】:

  • 那是 C++ 代码。你添加C标签有什么原因吗?
  • @Olaf 什么是 C 标签?
  • @Dima00782:你应该选择tour
  • @Olaf thx,现在我明白了。

标签: c++ debugging tcmalloc google-perftools


【解决方案1】:

看起来你的代码 不从 main.cpp 调用 malloc/new 导致链接不链接 libtcmalloc.so 到 ./a.out。 IE。你可以通过 ldd ./a.out 看到它。 这不是它应该的工作方式。

由于这个 tcmalloc 是与您共享的一起加载的 为时已晚且不受支持的对象。

您可以解决这个“倡议”(这与往常一样,很明显, 善意的结果)通过添加 -Wl,--no-as-needed before -ltcmalloc 当你构建你的主可执行文件时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多