Cannot find -lgfortran

I'm trying to install a package in R (package "ks"). It fails with error message:

/usr/bin/ld: cannot find -lgfortran

I've already installed the Ubuntu package build-essential:

sudo apt-get install build-essential

I've also tried adding symbolic links:

sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so
sudo ln -s /usr/lib/libgfortran.so.3.0.0 /usr/lib/libgfortran.so
sudo ldconfig

I use gcc and g++ regularly, but haven't yet had reason to use gfortran.

I've seen others with this problem on gcc-4.7 (http://ubuntuforums.org/showthread.php?t=2123821), so I wonder if this is from manually installing gcc-4.7. I followed the recipe from the accepted answer here here and here here.

Running lsb_release -a prints

Ubuntu 12.04.2 LTS

and running uname -r prints

3.2.0-39-generic-pae

Can anyone offer advice for why ld doesn't work?


Solution 1:

What I did, I check on ubuntu if the versions of g++, gcc and gfortran are the same or not.

I guess it is better if you have all the three of same version.

# first check the versions:
gcc --version
g++ --version
gfortran --version

# If versions are different, then install:
sudo apt-get update
apt-get install gcc-4.9 g++-4.9 gfortran-4.9

For me this resolved all the issues which I was facing while installing "TTR" package in R using RStudio on Ubuntu.

If you further run into the issue gfortran: command not found, make sure that you have /usr/bin/gfortran linking to the actual version of gfortran you have installed (e.g. linking to gfortran-4.9):

sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-11 70

Solution 2:

A little more explanation to Cloud Oliver's answer.

Find out the gcc version currently being used through this command.

$sudo update-alternatives --config gcc

* 2            /usr/bin/gcc-4.7   60        manual mode

The entry with * tells which version of GCC is being used. Just press enter to keep the current settings.

If it prints "no alternatives for gcc", you might have to use this command to find out the version:

apt-cache policy gcc
  1. cd to the right gcc directory (replace the version number with yours):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. You can search for libgfortran.a with the following command (optional). In my case it was present in the /usr/lib/gcc/x86_64-linux-gnu/4.8/ directory.

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Create the symlink:

    sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a