Não foi possível encontrar -lgfortran

12

Estou tentando instalar um pacote no R (pacote "ks"). Falha com a mensagem de erro:

/usr/bin/ld: cannot find -lgfortran

Eu já instalei o pacote essencial do Ubuntu:

sudo apt-get install build-essential

Eu também tentei adicionar links simbólicos:

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

Uso o gcc e o g ++ regularmente, mas ainda não tive motivos para usar o gfortran.

Eu já vi outras pessoas com esse problema no gcc-4.7 ( http://ubuntuforums.org/showthread.php?t=2123821 ), então eu me pergunto se isso é da instalação manual do gcc-4.7. Eu segui a receita da resposta aceita aqui aqui e aqui aqui .

lsb_release -aImpressões em execução

Ubuntu 12.04.2 LTS

e uname -rimpressões em execução

3.2.0-39-generic-pae

Alguém pode oferecer conselhos sobre por ldque não funciona?

do utilizador
fonte
11
Você tentou criar links simbólicos nas bibliotecas de tempo de execução, não aquelas que o vinculador deseja (* .a dev libs). Parece o problema do caminho.
Andrejs Cainikovs

Respostas:

5

Você precisa instalar o gfortran. O erro indica que faltam as bibliotecas estáticas para a vinculação em tempo de construção, não as bibliotecas dinâmicas que você tentou ajustar.

rfindeis
fonte
Quando tento sudo apt-get install gfortran, recebo 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.... Alguma idéia?
utilizador
Bem, no meu sistema, recebo dpkg -S /usr/lib/gcc/x86)64-linux-gnu/4.6/libgfortran.aa resposta de que isso é do gfortran-4.6pacote. O Gcc está procurando o arquivo .a. Se você instalou outra versão do gcc, o vinculador procurará dentro de um diretório com nome semelhante o libgfortran.a.
Rfindeis
Parece uma resposta válida.
Andrejs Cainikovs
A ligação simbólica da biblioteca 4.6 para o compilador 4.7 pode funcionar. Também passando o caminho correto com -L(que é basicamente o mesmo). Se isso falhar, você precisará instalar a versão 4.7 do gfortran a partir do ppa usado para o gcc 4.7. Qual versão do gfortran você tem agora?
Rfindeis
Eu precisava usar o mesmo truque que instalava o gcc-4.7 para instalar o gfortran-4.7.
utilizador
9

Um pouco mais de explicação para a resposta de Cloud Oliver.

Descubra a versão do gcc atualmente sendo usada através deste comando.

$sudo update-alternatives --config gcc

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

A entrada com *informa qual versão do GCC está sendo usada. Basta pressionar Enter para manter as configurações atuais.

Se ele imprimir "sem alternativas para o gcc", talvez seja necessário usar este comando para descobrir a versão:

apt-cache policy gcc
  1. cd para o diretório gcc direito (substitua o número da versão pelo seu):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. Você pode procurar libgfortran.acom o seguinte comando (opcional). No meu caso, estava presente no /usr/lib/gcc/x86_64-linux-gnu/4.8/diretório

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Crie o link simbólico:

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

O que fiz, verifico no ubuntu se as versões do g ++, gcc e g são iguais ou não.

Eu acho que é melhor se você tiver todos os três da mesma versão.

# 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

Para mim, isso resolveu todos os problemas que eu estava enfrentando ao instalar o pacote "TTR" no R usando o RStudio no Ubuntu.

Manoj Kumar
fonte
11
Esta é a solução correta. Nenhuma das soluções acima funcionou para mim
Yonatan Simson
11
Estou no gcc 6.5, mas os mesmos métodos resolveram o problema. Curiosamente, a mesma fonte: um pacote R obscuro.
Ufos
Sim, essa foi a melhor solução em que pude pensar.
Manoj Kumar
4

Solução:

cd /usr/lib/gcc/x86_64-linux-gnu/4.6
sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Cloud Oliver
fonte
Você poderia torná-lo um pouco mais detalhado? Talvez uma cdlinha separada , pelo menos?
Volker Siegel
2
Por favor, adicione uma explicação. As pessoas nunca devem executar cegamente os comandos que encontram na internet. Então, por favor, também não escreva.
s3lph
Obrigado, isso resolveu para mim! No meu caso, foi cd /usr/lib/gcc/x86_64-linux-gnu/4.9.3e então sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Zhubarb