当我使用共享库编译和运行此程序时,为什么tcmalloc会失败?

时间:2015-07-01 17:32:10

标签: c++ debugging tcmalloc google-perftools

代码simular代码在这里: 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'

1 个答案:

答案 0 :(得分:0)

看起来像你的代码 不从main.cpp调用malloc / new导致链接不链接 libtcmalloc.so到./a.out。即你可以通过做ldd ./a.out来看到它。 它不应该如何工作。

由于此tcmalloc与您的共享一起加载 对象太迟而且不受支持。

你可以解决这个“倡议”(这与往常一样,显然, 良好意图的结果)通过添加-Wl, - 之前不需要 -ltcmalloc在构建主可执行文件时。