Не могу найти -lgfortran


12

Я пытаюсь установить пакет в R (пакет "ks"). Сбой с сообщением об ошибке:

/usr/bin/ld: cannot find -lgfortran

Я уже установил пакет сборки Ubuntu:

sudo apt-get install build-essential

Я также попытался добавить символические ссылки:

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

Я регулярно использую gcc и g ++, но у меня еще не было причин использовать gfortran.

Я видел других с этой проблемой на gcc-4.7 ( http://ubuntuforums.org/showthread.php?t=2123821 ), поэтому мне интересно, если это из-за ручной установки gcc-4.7. Я следовал рецепту из принятого ответа здесь и здесь, здесь .

Бегущие lsb_release -aотпечатки

Ubuntu 12.04.2 LTS

и бегущие uname -rотпечатки

3.2.0-39-родовой-пай

Может кто-нибудь дать совет, почему ldне работает?


1
Вы пытались создать символические ссылки на библиотеки времени выполнения , а не на те, которые нужны компоновщику (* .a dev libs). Похоже, проблема пути.
Андрейс Кайников

Ответы:


5

Вам необходимо установить gfortran. Ошибка указывает на то, что отсутствует статическая библиотека для компоновки во время сборки, а не динамические библиотеки, которые вы пытались настроить.


Когда я пытаюсь sudo apt-get install gfortran, я получаю 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.... Есть мысли?
пользователь

Ну, в моей системе я получаю за dpkg -S /usr/lib/gcc/x86)64-linux-gnu/4.6/libgfortran.aответ, что это из gfortran-4.6пакета. Gcc ищет файл .a. Если вы установили другую версию gcc, компоновщик ищет в каталоге с аналогичным именем libgfortran.a.
rfindeis

Похоже, правильный ответ.
Андрейс Кайников

Символическое связывание библиотеки 4.6 для компилятора 4.7 может работать. Также прохождение правильного пути с -L(что в значительной степени совпадает). Если это не поможет, вам нужно установить версию gfortran 4.7 из ppa, который вы использовали для gcc 4.7. Какая версия Gfortran у вас сейчас?
rfindeis

Мне нужно было использовать тот же прием, что и при установке gcc-4.7, чтобы установить gfortran-4.7.
Пользователь

9

Еще немного объяснения к ответу Облака Оливера.

Узнайте версию gcc, которая в данный момент используется этой командой.

$sudo update-alternatives --config gcc

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

Запись с *указывает, какая версия GCC используется. Просто нажмите Enter, чтобы сохранить текущие настройки.

Если он выводит «нет альтернатив для gcc», возможно, вам придется использовать эту команду, чтобы узнать версию:

apt-cache policy gcc
  1. cd в правильный каталог gcc (замените номер версии на ваш):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. Вы можете искать libgfortran.aс помощью следующей команды (необязательно). В моем случае это было в /usr/lib/gcc/x86_64-linux-gnu/4.8/каталоге.

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Создайте символическую ссылку:

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

7

Что я сделал, я проверил в Ubuntu, совпадают ли версии g ++, gcc и g.

Я думаю, что лучше, если у вас есть все три одинаковой версии.

# 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

Для меня это решило все проблемы, с которыми я столкнулся при установке пакета "TTR" в R с использованием RStudio в Ubuntu.


1
Это правильное решение. Ни одно из вышеперечисленных решений не сработало для меня
Йонатан Симсон

1
Я на gcc 6.5, но те же методы решили проблему. Интересно, тот же источник: неясный пакет R.
Ufos

Да, это было лучшее решение, которое я мог придумать.
Манодж Кумар

4

Решение:

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

Не могли бы вы сделать это немного более многословным? Может быть, отдельной cdстрокой хотя бы?
Фолькер Сигел

2
Пожалуйста, добавьте объяснение. Люди никогда не должны слепо запускать команды, которые они находят в Интернете. Поэтому, пожалуйста, также не пишите их.
s3lph

Спасибо, это решило это для меня! В моем случае это было cd /usr/lib/gcc/x86_64-linux-gnu/4.9.3и тогда sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Жубарб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.