Подтвердить что ты не робот

Пакет сборки R и ошибка "ld: not find -lgfortran"

Я пытаюсь установить пакеты 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 --version GNU Fortran (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2

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

/sbin/ldconfig.real: Не удается stat/usr/lib/libgfortran.so: Нет такого файла или каталога

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

4b9b3361

Ответ 1

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

 $ sudo apt-get install r-base-dev

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

Ответ 2

У меня была такая же проблема при попытке установить пакет 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.

Ответ 3

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

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

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

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

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

Ответ 4

Та же проблема при установке пакета R minqa на Ubuntu 12.04, R3.1.0., 32-битный x86 (на самом деле это было частью установки пакета 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

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

Ответ 5

Я использую 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.

Ответ 6

Просто оставив это здесь для дальнейшего использования, как в моем случае (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

Ответ 7

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

yum install gcc44-gfortran

Ответ 8

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

Ответ 9

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

Установите Homebrew и запустите:

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

Ответ 10

Мне не нужно было устанавливать какие-либо библиотеки. Выкладывая то, что у меня сработало, может, кому-то будет полезно.

У меня был ~/.R/Makevars, определяющий использовать CC=gcc-8. На моей машине gcc по умолчанию - 7.4.0, но я установил gcc-8. В то же время у меня не было gfortran 8, а только 7.4.0. Комментирование строки в Makevars приводит к тому, что компиляция возвращается к использованию gcc-7 по умолчанию, и тогда он успешно использовал gfortran-7 lib.