Почему tcmalloc терпит неудачу, когда я компилирую и запускаю эту программу с общей библиотекой?

Код симметричный для кода здесь:
Почему tcmalloc не печатает имя функции, предоставленное через dlopen

Makefile:

  • все:
  • 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'

0

Решение

Похоже, ваш код
не вызывает malloc / new из main.cpp, заставляет ссылку не ссылаться
libtcmalloc.so to ./a.out. То есть Вы можете увидеть это, выполнив команду ldd ./a.out.
Это не так, как это должно работать.

В результате этого tcmalloc загружается вместе с вашим общим
объект, который слишком поздно и не поддерживается.

Вы можете обойти эту «инициативу» (которая, как обычно, ясно,
результат благих намерений), добавив -Wl, — не по мере необходимости
-ltcmalloc при сборке вашего основного исполняемого файла.

0

Другие решения


По вопросам рекламы [email protected]