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?


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.


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
    

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.


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.