Сборка пакета R и ошибка «ld: не удается найти -lgfortran» - PullRequest
35 голосов
/ 10 июня 2011

Я пытаюсь установить пакет lars.Ubuntu 11.04 Natty 64-битная.Из здания я получаю:

* installing *source* package âlarsâ ...
** libs
gfortran   -fpic  -O3 -pipe  -g -c delcol.f -o delcol.o
gcc -shared -o lars.so delcol.o -lgfortran -lm -L/usr/lib64/R/lib -lR
/usr/bin/ld: cannot find -lgfortran
collect2: ld returned 1 exit status
make: *** [lars.so] Error 1
ERROR: compilation failed for package âlarsâ

gfortran установлен, и когда я запускаю gfortran --version, я получаю

gfortran - версия GNU Fortran (Ubuntu /Linaro 4.5.2-8ubuntu4) 4.5.2

sudo ldconfig -v выдает ошибку

/ sbin / ldconfig.real: Невозможно stat / usr / lib / libgfortran.Итак: Нет такого файла или каталога

Я уже удалил и переустановил gfortran.Что мне нужно, чтобы это исправить?

Ответы [ 9 ]

57 голосов
/ 21 марта 2013

У меня была такая же проблема при попытке установить пакет CRAN VGAM на Ubuntu 12.10 64bit.У меня уже был установлен r-base-dev, но второй комментарий Эндрю Редда на ответ Дирка Эддельбюттеля сработал для меня.

В частности, я получил две ошибки:

/usr/bin/ld: cannot find -lgfortran
/usr/bin/ld: cannot find -lquadmath

, которые были исправлены в строках:

sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libquadmath.so.0 /usr/lib/libquadmath.so

Обратите внимание, что потребуется только первая строказабота о проблеме из оригинального поста.Во второй строке исправлена ​​моя дополнительная ошибка с lquadmath.

26 голосов
/ 10 июня 2011

Для семейства Debian / Ubuntu мы обычно рекомендуем

 $ sudo apt-get install r-base-dev

, поскольку он включает все пакеты, обычно необходимые для компиляции.И этот подход все время тестируется, так как на это полагаются автоматизированные сборщики пакетов (а также дополнительные сборки для каждого пакета).Здесь также указан пакет gfortran;может быть, у вас неработающая ссылка из предыдущей установки, поэтому я также попробую dpkg --purge gfortran; apt-get install gfortran.Тем не менее, десятки пакетов R (и самого R) используют Фортран, поэтому здесь не должно быть никакой магии.

11 голосов
/ 26 сентября 2014

Похоже, другие предложения уже исправили вашу проблему, но ваш вопрос также относился ко мне, но решение было другим в моем случае. Моя проблема заключалась в том, что мои версии gcc и g ++ отличались от моей версии gfortran. Я использовал следующее, чтобы переключить их так, чтобы они были одинаковыми.

  1. Проверьте, какая у вас версия gcc, g ++ и gfortran:

    g++ --version
    gcc --version
    gfortran --version
    
  2. Сопоставьте их так, чтобы они все были одинаковыми:

    sudo update-alternatives --config g++
    sudo update-alternatives --config gcc
    sudo update-alternatives --config gfortran
    

В моем случае у меня была только одна версия gfortran, поэтому я просто изменил версии g ++ и gcc, чтобы они соответствовали версии gfortran.

8 голосов
/ 09 июня 2014

Та же проблема при установке пакета R minqa в Ubuntu 12.04, R3.1.0., X86 32bit (фактически это было частью установки пакета caret).

Решено

sudo ln -s /usr/lib/i386-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so

Переустановка r-base-dev не сработала, и я не пытался переустановить gfortran из-за всех зависимостей.

В зависимости от системы / версии,

ls -l /usr/lib/libgfortran.so

проверяет, существует ли / существует ли ссылка.

3 голосов
/ 29 марта 2018

Я использую Centos и не могу получить r-base-dev. Я также установил gfortran, и его версия совпадает с версией gcc и g ++; это все еще не сработало. Однако я решил эту проблему, создав ~/.R/Makevars, используя

cd ~
mkdir .R
touch Makevars

Я нашел каталог, где я установил gfortran (очевидно, проблема в том, что R не может его найти) по

which gfortran

Там сказано, что я установил gfortran в usr/bin/gfortran. Затем я добавил флаги к .R/Makevars, чтобы указать R использовать:

F77 = /usr/bin/gfortran
FC = $F77
FLIBS = -L/usr/bin/gfortran

Вы можете редактировать файл Makevars следующим образом:

vi .R/Makevars

Теперь вы ввели программу vi, которая может редактировать текстовые файлы. Введите i для редактирования; Вы увидите INSERT в нижней части окна терминала. Затем вы можете ввести то, что я положил выше. Чтобы сохранить изменения и выйти vi, нажмите клавишу esc и введите :wq.

Я не совсем уверен, правильно ли я поставил строку FLIBS, так как она сильно отличается для MacOS. В MacOS есть каталог под gfortran, в котором есть библиотеки для ссылок, но, очевидно, gfortran не является каталогом в linux. По крайней мере, это сработало для меня, а также решило проблему /usr/bin/ld: cannot find -lquadmath, поэтому я установил пакеты R, требующие gfortran.

1 голос
/ 07 января 2019

Просто оставив это здесь для дальнейшего использования, как в моем случае (Amazon Linux EC2 AMI), проблема заключалась просто в наименовании символической ссылки, а не в ее расположении.

sudo ln -s /usr/lib64/libgfortran.so.3 /usr/lib64/libgfortran.so
sudo ln -s /usr/lib64/libquadmath.so.0 /usr/lib64/libquadmath.so
0 голосов
/ 20 июня 2019

Для тех, кто попадает на эту страницу с такой же ошибкой на Mac , попробуйте следующее:

Установить Доморощенный и запустить:

brew install gcc

Затем создайте файл ~/.R/Makevars с содержимым (учитывая, что это соответствует gcc версии 9.1.0):

VER=-9
CC=gcc$(VER)
CXX=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/9.1.0/lib/gcc/9

  • R v3.6.0
  • gcc v9.1.0
  • Доморощенный v2.1.6
  • macOS v10.14.5
0 голосов
/ 30 ноября 2016

Для будущих потерянных душ, это также помогает проверить соответствие версий компилятора (для https://askubuntu.com/questions/276892/cannot-find-lgfortran). В моем случае gcc и gfortran были оба 4.8.4, но g ++ был 4.6.

0 голосов
/ 09 сентября 2014

Если вы используете gcc44, вам потребуется:

yum install gcc44-gfortran
...