Tidak dapat menemukan -lgfortran

12

Saya mencoba menginstal paket dalam R (paket "ks"). Gagal dengan pesan kesalahan:

/usr/bin/ld: cannot find -lgfortran

Saya sudah menginstal paket Ubuntu build-essential:

sudo apt-get install build-essential

Saya juga mencoba menambahkan tautan simbolis:

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

Saya menggunakan gcc dan g ++ secara teratur, tetapi belum memiliki alasan untuk menggunakan gfortran.

Saya telah melihat orang lain dengan masalah ini pada gcc-4.7 ( http://ubuntuforums.org/showthread.php?t=2123821 ), jadi saya ingin tahu apakah ini dari menginstal manual gcc-4.7. Saya mengikuti resep dari jawaban yang diterima di sini dan di sini .

Menjalankan lsb_release -acetakan

Ubuntu 12.04.2 LTS

dan menjalankan uname -rcetakan

3.2.0-39-generik-pae

Adakah yang bisa memberikan saran mengapa ldtidak berhasil?

pengguna
sumber
1
Anda mencoba membuat tautan simbolis terhadap pustaka runtime , bukan pustaka yang diinginkan pautan (* .a lib libs). Sepertinya masalah jalur.
Andrejs Cainikovs

Jawaban:

5

Anda perlu menginstal gfortran. Kesalahan menunjukkan bahwa lib statis untuk penautan build-time tidak ada lib dinamis yang Anda coba sesuaikan.

rfindeis
sumber
Ketika saya mencoba sudo apt-get install gfortran, saya mendapatkan 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.... Ada pemikiran?
pengguna
Nah, pada sistem saya, saya mendapatkan dpkg -S /usr/lib/gcc/x86)64-linux-gnu/4.6/libgfortran.ajawaban bahwa ini dari gfortran-4.6paket. Gcc sedang mencari file .a. Jika Anda menginstal versi gcc lain, linker mencari di dalam direktori yang bernama serupa untuk libgfortran.a.
rfindeis
Sepertinya jawaban yang valid.
Andrejs Cainikovs
Simbol yang menghubungkan pustaka 4.6 untuk kompiler 4.7 mungkin bekerja. Juga melewati jalan yang benar dengan -L(yang sebagian besar sama). Jika gagal, Anda harus menginstal versi gfortran 4.7 dari ppa yang Anda gunakan untuk gcc 4.7. Apa versi gfortran yang Anda miliki sekarang?
rfindeis
Saya perlu menggunakan trik yang sama seperti menginstal gcc-4.7 untuk menginstal gfortran-4.7.
pengguna
9

Penjelasan lebih sedikit untuk jawaban Cloud Oliver.

Cari tahu versi gcc yang saat ini digunakan melalui perintah ini.

$sudo update-alternatives --config gcc

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

Entri dengan *memberitahu versi GCC mana yang digunakan. Cukup tekan enter untuk menyimpan pengaturan saat ini.

Jika mencetak "tidak ada alternatif untuk gcc", Anda mungkin harus menggunakan perintah ini untuk mengetahui versi:

apt-cache policy gcc
  1. cd ke direktori gcc kanan (ganti nomor versi dengan milikmu):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. Anda dapat mencari libgfortran.adengan perintah berikut (opsional). Dalam kasus saya itu ada di /usr/lib/gcc/x86_64-linux-gnu/4.8/direktori.

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Buat symlink:

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

Apa yang saya lakukan, saya periksa di ubuntu apakah versi g ++, gcc, dan g sama atau tidak.

Saya kira lebih baik jika Anda memiliki ketiga versi yang sama.

# 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

Bagi saya ini menyelesaikan semua masalah yang saya hadapi saat menginstal paket "TTR" di R menggunakan RStudio di Ubuntu.

Manoj Kumar
sumber
1
Ini solusi yang tepat. Tidak ada solusi di atas yang berfungsi untuk saya
Yonatan Simson
1
Saya menggunakan gcc 6.5, tetapi metode yang sama menyelesaikan masalah. Menariknya, sumber yang sama: paket R yang tidak jelas.
Ufos
Ya, ini adalah salah satu solusi terbaik yang bisa saya pikirkan.
Manoj Kumar
4

Larutan:

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
Cloud Oliver
sumber
Bisakah Anda membuatnya sedikit lebih verbose? Mungkin cdgaris yang terpisah setidaknya?
Volker Siegel
2
Silakan tambahkan penjelasan. Orang seharusnya tidak pernah secara membabi buta menjalankan perintah yang mereka temukan di internet. Jadi tolong juga jangan menulisnya.
s3lph
Terima kasih, ini menyelesaikannya untuk saya! Dalam kasus saya cd /usr/lib/gcc/x86_64-linux-gnu/4.9.3dulu sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Zhubarb