Не вдається знайти -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-generic-pae

Хто-небудь може запропонувати поради, чому 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(що багато в чому однакове). Якщо цього не вдалося, вам потрібно встановити 4.7 версію gfortran з 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.