Пакет сборки 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. Что мне нужно, чтобы исправить это?
Ответы
Ответ 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.