Saturday, 28 January 2017

Solution for ltcmalloc in Linux based system

14:57 Posted by SRE Hacks , , 1 comment
ltcmalloc is a library used in Linux based systems. This library is used for memory allocation.
You can find this library files in /usr/lib/.
But some time we get an error cannot find -ltcmalloc
Here is the screen shot of error


This is because of missing ltcmalloc in your system.
I run Opencontrail unit test and get this error


I automate the solution of this you can use the script bellow or use manual method given below

Automated Solution:

Put this code in .sh file and run it as root (using sudo)
       
command -v git >/dev/null 2>&1 || { echo >&2 "I require git but it's not installed.  Aborting."; exit 1; }
git clone https://github.com/imranhassanabdi/tcmalloc-files.git 
sudo cp -r tcmalloc-files/tc-malloc/* /usr/lib/.
sudo cp tcmalloc-files/libunwind.so.8 /usr/lib/x86_64-linux-gnu/
sudo rm -r tcmalloc-files/
sudo cd /usr/lib/
sudo ln -s libtcmalloc_and_profiler.so.4.1.2 libtcmalloc_and_profiler.so.4
sudo ln -s libtcmalloc_and_profiler.so.4.1.2 libtcmalloc_and_profiler.so
sudo ln -s libtcmalloc_debug.so.4.1.2 libtcmalloc_debug.so.4
sudo ln -s libtcmalloc_debug.so.4.1.2 libtcmalloc_debug.so
sudo ln -s libtcmalloc_minimal_debug.so.4.1.2 libtcmalloc_minimal_debug.so.4
sudo ln -s libtcmalloc_minimal_debug.so.4.1.2 libtcmalloc_minimal_debug.so
sudo ln -s libtcmalloc_minimal.so.4.1.2 libtcmalloc_minimal.so.4
sudo ln -s libtcmalloc_minimal.so.4.1.2 libtcmalloc_minimal.so
sudo ln -s libtcmalloc.so.4.1.2 libtcmalloc.so.4
sudo ln -s libtcmalloc.so.4.1.2 libtcmalloc.so
sudo ldconfig
       
 


Manual Solution:


  • Run this command in /usr/lib


       

            ll | grep ltcmaloc

       
 

  • If you get nothing means you have missing ltcmalloc files
  • Next you download ltcmalloc files, I have uploaded all files here you can clone it
After clone run these commands
  • Copy all files in tc-malloc to /usr/lib using this command

       
            sudo cp -r tcmalloc-files/tc-malloc/* /usr/lib/.
       
 

  • Then copy the other file in clone directory

       
            sudo cp tcmalloc-files/libunwind.so.8 /usr/lib/x86_64-linux-gnu/
       
 

  • Then run these commands in sequence to make linking between files

       
            sudo ln -s libtcmalloc_and_profiler.so.4.1.2 libtcmalloc_and_profiler.so.4
     sudo ln -s libtcmalloc_and_profiler.so.4.1.2 libtcmalloc_and_profiler.so
     sudo ln -s libtcmalloc_debug.so.4.1.2 libtcmalloc_debug.so.4
     sudo ln -s libtcmalloc_debug.so.4.1.2 libtcmalloc_debug.so
     sudo ln -s libtcmalloc_minimal_debug.so.4.1.2 libtcmalloc_minimal_debug.so.4
     sudo ln -s libtcmalloc_minimal_debug.so.4.1.2 libtcmalloc_minimal_debug.so
     sudo ln -s libtcmalloc_minimal.so.4.1.2 libtcmalloc_minimal.so.4
     sudo ln -s libtcmalloc_minimal.so.4.1.2 libtcmalloc_minimal.so
     sudo ln -s libtcmalloc.so.4.1.2 libtcmalloc.so.4
     sudo ln -s libtcmalloc.so.4.1.2 libtcmalloc.so
            sudo ldconfig
       
 

  • Now check that library install successfully using this command

       
            ldconfig -p | grep tcmalloc
       
 


If it shows result like this

       
libtcmalloc_minimal_debug.so.4 (libc6,x86-64) => /usr/lib/libtcmalloc_minimal_debug.so.4
libtcmalloc_minimal_debug.so (libc6,x86-64) => /usr/lib/libtcmalloc_minimal_debug.so
libtcmalloc_minimal.so.4 (libc6,x86-64) => /usr/lib/libtcmalloc_minimal.so.4
libtcmalloc_minimal.so (libc6,x86-64) => /usr/lib/libtcmalloc_minimal.so
libtcmalloc_debug.so.4 (libc6,x86-64) => /usr/lib/libtcmalloc_debug.so.4
libtcmalloc_debug.so (libc6,x86-64) => /usr/lib/libtcmalloc_debug.so
libtcmalloc_and_profiler.so.4 (libc6,x86-64) => /usr/lib/libtcmalloc_and_profiler.so.4
libtcmalloc_and_profiler.so (libc6,x86-64) => /usr/lib/libtcmalloc_and_profiler.so
libtcmalloc.so.4 (libc6,x86-64) => /usr/lib/libtcmalloc.so.4
libtcmalloc.so (libc6,x86-64) => /usr/lib/libtcmalloc.so
       
 


Then you are successful in copying filing and linking these files.