В моем случае проблема заключалась в том, что в /usr/lib/
было только libprofiler.so.0
, а в *1003* нет:
user@compy:/usr/include$ dpkg -L libgoogle-perftools4
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libgoogle-perftools4
/usr/share/doc/libgoogle-perftools4/README.Debian
/usr/share/doc/libgoogle-perftools4/copyright
/usr/lib
/usr/lib/libprofiler.so.0.4.5
/usr/lib/libtcmalloc.so.4.2.6
/usr/lib/libtcmalloc_debug.so.4.2.6
/usr/lib/libtcmalloc_and_profiler.so.4.2.6
/usr/share/doc/libgoogle-perftools4/AUTHORS
/usr/share/doc/libgoogle-perftools4/TODO
/usr/share/doc/libgoogle-perftools4/README.gz
/usr/share/doc/libgoogle-perftools4/NEWS.gz
/usr/share/doc/libgoogle-perftools4/changelog.Debian.gz
/usr/lib/libtcmalloc.so.4
/usr/lib/libtcmalloc_and_profiler.so.4
/usr/lib/libprofiler.so.0
/usr/lib/libtcmalloc_debug.so.4
Не знаю, как это исправить, но я просто создал символическую ссылку в / usr / lib:
user@compy:/usr/lib$ sudo ln -s libprofiler.so.0 libprofiler.so
Это заставит -lprofiler
работать.
Если вы не возражаете изменить свой Makefile, вы можете альтернативно указать -l:libprofiler.so.0
вместо -lprofiler
(обратите внимание на дополнительное двоеточие) ( source ).
РЕДАКТИРОВАТЬ: Официальный способ получить .so
, по-видимому, установить пакет libgoogle-perftools-dev
, как объяснено здесь :
user@compy:/usr/lib$ dpkg -S libprofiler.so
libgoogle-perftools-dev: /usr/lib/libprofiler.so
libgoogle-perftools4: /usr/lib/libprofiler.so.0.4.5
libgoogle-perftools4: /usr/lib/libprofiler.so.0
Я понимаю, что если вы хотите создать ссылку на определенную библиотеку, вам следует установить пакет libx-dev
, который будет содержать /usr/lib/libx.so
. Этот файл будет только символической ссылкой на определенную версию, такую как /usr/lib/libx.so.1.2
. Когда вы ссылаетесь на /usr/lib/libx.so
, указав -lx
на свой компоновщик, вы фактически создадите ссылку в вашей программе на конкретную версию, на которую ссылается в тот момент, записав SONAME libx.so.1
(номер последней версии обрезается, как указано ниже). здесь ). Поэтому, когда вы запустите свою программу в более поздний момент времени, динамический компоновщик будет искать только /usr/lib/libx.so.1
, который символически связан с /usr/lib/libx.so.1.2
, а не /usr/lib/libx.so
, следовательно, пакет dev
не должен существовать.
Таким образом, пакеты libx-dev
предназначены для компиляции и связывания с libx
, а пакет libx
предназначен для запуска предварительно скомпилированной программы с libx
.