Impossibile trovare -lgfortran


12

Sto cercando di installare un pacchetto in R (pacchetto "ks"). Non riesce con il messaggio di errore:

/usr/bin/ld: cannot find -lgfortran

Ho già installato il pacchetto Ubuntu build-essential:

sudo apt-get install build-essential

Ho anche provato ad aggiungere collegamenti simbolici:

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 regolarmente gcc e g ++, ma non ho ancora avuto motivo di usare gfortran.

Ho visto altri con questo problema su gcc-4.7 ( http://ubuntuforums.org/showthread.php?t=2123821 ), quindi mi chiedo se questo provenga dall'installazione manuale di gcc-4.7. Ho seguito la ricetta dalla risposta accettata qui e qui .

Esecuzione di lsb_release -astampe

Ubuntu 12.04.2 LTS

e uname -rstampe correnti

3.2.0-39-generic-pae

Qualcuno può offrire consigli per perché ldnon funziona?


1
Hai provato a creare collegamenti simbolici contro le librerie di runtime , non quelle richieste dal linker (* .a dev libs). Sembra il problema del percorso.
— Andrejs Cainikovs,

Risposte:


5

Devi installare gfortran. L'errore indica che manca la libreria statica per il collegamento in fase di creazione non le librerie dinamiche che si è tentato di regolare.


Quando provo sudo apt-get install gfortran, ricevo 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.... Qualche idea?
— utente

Bene, sul mio sistema ottengo dpkg -S /usr/lib/gcc/x86)64-linux-gnu/4.6/libgfortran.ala risposta che proviene dal gfortran-4.6pacchetto. Gcc sta cercando il file .a. Se hai installato un'altra versione di gcc, il linker sta cercando libgfortran.a in una directory con un nome simile.
— rfindeis,

Sembra una risposta valida.
— Andrejs Cainikovs,

Il collegamento simbolico della libreria 4.6 per il compilatore 4.7 potrebbe funzionare. Passando anche il percorso corretto con -L(che è in gran parte lo stesso). In caso contrario, è necessario installare la versione 4.7 di gfortran dal ppa utilizzato per gcc 4.7. Che versione di gfortran hai adesso?
— rfindeis,

Avevo bisogno di usare lo stesso trucco dell'installazione di gcc-4.7 per installare gfortran-4.7.
— utente

9

Una spiegazione in più alla risposta di Cloud Oliver.

Scopri la versione di gcc attualmente in uso tramite questo comando.

$sudo update-alternatives --config gcc

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

La voce con *indica quale versione di GCC è in uso. Premi Invio per mantenere le impostazioni correnti.

Se stampa "nessuna alternativa a gcc", potresti dover usare questo comando per scoprire la versione:

apt-cache policy gcc
  1. cd nella directory gcc corretta (sostituisci il numero di versione con il tuo):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. Puoi cercare libgfortran.acon il seguente comando (opzionale). Nel mio caso era presente nella /usr/lib/gcc/x86_64-linux-gnu/4.8/directory.

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Crea il link simbolico:

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

7

Quello che ho fatto, controllo su Ubuntu se le versioni di g ++, gcc e g sono uguali o meno.

Immagino sia meglio se hai tutte e tre le stesse versioni.

# 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

Per me questo ha risolto tutti i problemi che stavo affrontando durante l'installazione del pacchetto "TTR" in R usando RStudio su Ubuntu.


1
Questa è la soluzione corretta Nessuna delle soluzioni di cui sopra ha funzionato per me
— Yonatan Simson,

1
Sono su gcc 6.5, ma gli stessi metodi hanno risolto il problema. È interessante notare che la stessa fonte: un pacchetto R oscuro.
— Ufo

Sì, questa è stata la migliore soluzione a cui potrei pensare.
— Manoj Kumar,

4

Soluzione:

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

Potresti renderlo un po 'più dettagliato? Forse cdalmeno una linea separata ?
— Volker Siegel,

2
Si prega di aggiungere una spiegazione. Le persone non dovrebbero mai eseguire ciecamente i comandi che trovano su Internet. Quindi, per favore, non scriverli.
— sabato

Grazie, questo mi ha risolto! Nel mio caso lo era cd /usr/lib/gcc/x86_64-linux-gnu/4.9.3e poi sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
— Zhubarb il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.