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.