Связывание с libtcmalloc ubuntu - PullRequest
7 голосов
/ 08 ноября 2011

Я установил пакет libtcmalloc-minimal0

, но когда я пытаюсь скомпилировать свою программу с флагом

-ltcmalloc-minimal0

Я получаю ошибку

/ usr / bin / ld: не могу найти -ltcmalloc_minimal0

Я проверил / usr / lib и библиотека там

Подробнее

dpkg дает следующее o / p

dpkg -L libtcmalloc-minimal0
/.
/usr
/usr/lib
/usr/lib/libtcmalloc_minimal.so.0.0.0
/usr/lib/libtcmalloc_minimal_debug.so.0.0.0
/usr/share
/usr/share/doc
/usr/share/doc/libtcmalloc-minimal0
/usr/share/doc/libtcmalloc-minimal0/TODO
/usr/share/doc/libtcmalloc-minimal0/AUTHORS
/usr/share/doc/libtcmalloc-minimal0/copyright
/usr/share/doc/libtcmalloc-minimal0/changelog.gz
/usr/share/doc/libtcmalloc-minimal0/README.gz
/usr/share/doc/libtcmalloc-minimal0/changelog.Debian.gz
/usr/lib/libtcmalloc_minimal.so.0
/usr/lib/libtcmalloc_minimal_debug.so.0

, и я компилирую для 64-битного режима

, а библиотека также 64-битная

file  /usr/lib/libtcmalloc_minimal.so.0.0.0
/usr/lib/libtcmalloc_minimal.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped

Ответы [ 2 ]

6 голосов
/ 08 ноября 2011

Нельзя просто связать файл с -l, если он не заканчивается точно .so, поскольку компоновщик предполагает определенное соглашение об именах (lib*.so).

У вас есть несколько вариантов:

  • Установите libtcmalloc-minimal0-dev, если он существует, что должно обеспечить динамическую связь .so.

  • Создайте символическую ссылку самостоятельно: cd /usr/lib; ln -s libtcmalloc_minimal.so.0.0.0 libtcmalloc_minimal.so; cd -

  • Ссылка напрямую на библиотеку без символической ссылки с помощью gcc test.c /usr/lib/libtcmalloc_minimal.so.0.0.0

  • Ссылка с использованием опции -l с использованием полного имени: -l:libtcmalloc_minimal.so.0.0.0

0 голосов
/ 08 ноября 2011

Запуск dpkg -L libtcmalloc-minimal0 покажет вам, что библиотека /usr/lib/libtcmalloc_minimal.so.0, поэтому правильный параметр должен быть -ltcmalloc_minimal без какой-либо цифры

...