No se puede encontrar -lgfortran


12

Estoy tratando de instalar un paquete en R (paquete "ks"). Falla con el mensaje de error:

/usr/bin/ld: cannot find -lgfortran

Ya he instalado el paquete de Ubuntu build-essential:

sudo apt-get install build-essential

También he intentado agregar enlaces 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 gcc y g ++ regularmente, pero aún no he tenido motivos para usar gfortran.

He visto a otros con este problema en gcc-4.7 ( http://ubuntuforums.org/showthread.php?t=2123821 ), así que me pregunto si esto se debe a la instalación manual de gcc-4.7. Seguí la receta de la respuesta aceptada aquí y aquí .

Ejecutando lsb_release -aimpresiones

Ubuntu 12.04.2 LTS

y corriendo uname -rimpresiones

3.2.0-39-generico-pae

¿Alguien puede ofrecer consejos sobre por qué ldno funciona?


1
Intentó hacer enlaces simbólicos contra bibliotecas de tiempo de ejecución , no las que el enlazador quiere (* .a dev libs). Parece el problema del camino.
Andrejs Cainikovs 01 de

Respuestas:


5

Necesitas instalar gfortran. El error señala que falta la biblioteca estática para la vinculación en tiempo de compilación, no las bibliotecas dinámicas que intentó ajustar.


Cuando lo intento sudo apt-get install gfortran, me sale 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.... ¿Alguna idea?
usuario

Bueno, en mi sistema obtengo dpkg -S /usr/lib/gcc/x86)64-linux-gnu/4.6/libgfortran.ala respuesta de que esto es del gfortran-4.6paquete. Gcc está buscando el archivo .a. Si instaló otra versión de gcc, el enlazador está buscando dentro de un directorio con un nombre similar para libgfortran.a.
rfindeis 01 de

Parece una respuesta válida
Andrejs Cainikovs

La vinculación simbólica de la biblioteca 4.6 para el compilador 4.7 podría funcionar. También pasando la ruta correcta con -L(que es en gran medida igual). Si esto falla, necesita instalar la versión 4.7 de gfortran desde el ppa que usó para gcc 4.7. ¿Qué versión de gfortran tienes ahora?
rfindeis

Necesitaba usar el mismo truco que instalar gcc-4.7 para instalar gfortran-4.7.
usuario

9

Un poco más de explicación a la respuesta de Cloud Oliver.

Descubra la versión de gcc que se utiliza actualmente con este comando.

$sudo update-alternatives --config gcc

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

La entrada con *indica qué versión de GCC se está utilizando. Simplemente presione Intro para mantener la configuración actual.

Si imprime "no hay alternativas para gcc", es posible que deba usar este comando para averiguar la versión:

apt-cache policy gcc
  1. cd al directorio gcc correcto (reemplace el número de versión con el suyo):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. Puede buscar libgfortran.acon el siguiente comando (opcional). En mi caso estaba presente en el /usr/lib/gcc/x86_64-linux-gnu/4.8/directorio.

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Crea el enlace simbólico:

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

7

Lo que hice, verifiqué en ubuntu si las versiones de g ++, gcc y g son las mismas o no.

Supongo que es mejor si tienes los tres de la misma versión.

# 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 mí, esto resolvió todos los problemas que enfrentaba al instalar el paquete "TTR" en R usando RStudio en Ubuntu.


1
Esta es la solución correcta. Ninguna de las soluciones anteriores funcionó para mí
Yonatan Simson

1
Estoy en gcc 6.5, pero los mismos métodos resolvieron el problema. Curiosamente, la misma fuente: un oscuro paquete de R.
Ovnis

Sí, esta fue la mejor solución que se me ocurrió.
Manoj Kumar

4

Solución:

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

¿Podrías hacerlo un poco más detallado? Tal vez una cdlínea separada al menos?
Volker Siegel

2
Por favor agregue una explicación. Las personas nunca deben ejecutar ciegamente los comandos que encuentran en Internet. Así que por favor tampoco los escribas.
s3lph

¡Gracias, esto me lo resolvió! En mi caso fue cd /usr/lib/gcc/x86_64-linux-gnu/4.9.3y luego sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Zhubarb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.