Обновление - Реальная причина
Как упомянул @Tsyvarev в комментарии, оказывается, что cmake не смог найти библиотеку, потому что я установил ее только "частично", должна быть установлена версия -dev
(libgoogle-perftools-dev
).
TL; DR
Что ж, получается, что tcmalloc
не является обычной / обычной библиотекой, а именно, у нее нет символьной ссылки libtcmalloc.so
, указывающей на .so.4
, поэтому cmake не может ее найти.
Как мне отладить find_library
?
Я нашел способ отладки find_library
через strace
:
$ rm -rf ./* && strace cmake ../scripts/ 2>&1 | grep tcmalloc
access("/usr/local/nvidia/bin/libtcmalloc.so", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/local/cuda/bin/libtcmalloc.so", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/local/sbin/libtcmalloc.so", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/local/bin/libtcmalloc.so", R_OK) = -1 ENOENT (No such file or directory)
...
<many lines skipped>
...
Из этого strace
вывода мы видим, что cmake, действительно, пытается добавить lib
и добавить .so
, но не пытается добавить ни одну версию.
Теперь, если мы посмотрим на другую "обычную" библиотеку:
# locate protobuf | grep "\.so"
/usr/lib/x86_64-linux-gnu/libprotobuf.so
/usr/lib/x86_64-linux-gnu/libprotobuf.so.17
/usr/lib/x86_64-linux-gnu/libprotobuf.so.17.0.0
мы увидим, что он устанавливает .so
символическую ссылку, а tcmalloc
не делает:
# locate tcmalloc | grep "\.so"
/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4
/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4.3.0