Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linking with libtcmalloc ubuntu

Tags:

gcc

tcmalloc

I had installed the package libtcmalloc-minimal0

but when I try to compile my program with flag

-ltcmalloc-minimal0

I am getting error

/usr/bin/ld: cannot find -ltcmalloc_minimal0

I had checked /usr/lib and the library is there

More Info

dpkg gives following 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

and I am compiling for 64 bit mode

and library is also 64 bit

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
like image 351
Vivek Goel Avatar asked Nov 08 '11 09:11

Vivek Goel


1 Answers

You can't link simply to a file with -l if it doesn't end exactly with .so, since the linker assumes a particular naming convention (lib*.so).

You have several choices:

  • Install libtcmalloc-minimal0-dev if it exists, which should provide the .so dynamic link.

  • Create the symlink yourself: cd /usr/lib; ln -s libtcmalloc_minimal.so.0.0.0 libtcmalloc_minimal.so; cd -

  • Link directly to the library without the symlink by using gcc test.c /usr/lib/libtcmalloc_minimal.so.0.0.0

  • Link using the -l option using the full name: -l:libtcmalloc_minimal.so.0.0.0

like image 127
wormsparty Avatar answered Nov 16 '22 02:11

wormsparty