Không thể tìm thấy -lgfortran


12

Tôi đang cố gắng cài đặt một gói trong R (gói "ks"). Nó không thành công với thông báo lỗi:

/usr/bin/ld: cannot find -lgfortran

Tôi đã cài đặt gói xây dựng Ubuntu cần thiết:

sudo apt-get install build-essential

Tôi cũng đã thử thêm các liên kết tượng trưng:

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

Tôi sử dụng gcc và g ++ thường xuyên, nhưng chưa có lý do để sử dụng gfortran.

Tôi đã thấy những người khác gặp vấn đề này trên gcc-4.7 ( http://ubuntuforums.org/showthread.php?t=2123821 ), vì vậy tôi tự hỏi liệu đây có phải là từ cài đặt thủ công gcc-4.7. Tôi đã làm theo công thức từ câu trả lời được chấp nhận ở đâyđây .

Chạy lsb_release -ain

Ubuntu 12.04.2 LTS

và chạy uname -rbản in

3.2.0-39-generic-pae

Bất cứ ai có thể cung cấp lời khuyên tại sao ldkhông làm việc?


1
Bạn đã cố gắng tạo các liên kết tượng trưng chống lại các thư viện thời gian chạy , không phải các liên kết mà trình liên kết muốn (* .a dev libs). Hình như vấn đề đường dẫn.
Andrejs Cainikovs

Câu trả lời:


5

Bạn cần cài đặt gfortran. Lỗi chỉ ra rằng lib tĩnh cho liên kết thời gian xây dựng bị thiếu không phải là lib động mà bạn đã cố gắng điều chỉnh.


Khi tôi cố gắng sudo apt-get install gfortran, tôi có 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.... có suy nghĩ gì không?
người dùng

Vâng, trên hệ thống của tôi, tôi nhận được dpkg -S /usr/lib/gcc/x86)64-linux-gnu/4.6/libgfortran.acâu trả lời rằng đây là từ gfortran-4.6gói. Gcc đang tìm tệp .a. Nếu bạn đã cài đặt một phiên bản gcc khác, trình liên kết sẽ tìm bên trong một thư mục có tên tương tự cho libgfortran.a.
rfindeis

Trông giống như một câu trả lời hợp lệ.
Andrejs Cainikovs

Tượng trưng liên kết thư viện 4.6 cho trình biên dịch 4.7 có thể hoạt động. Cũng vượt qua đúng đường dẫn với -L(phần lớn giống nhau). Nếu thất bại, bạn cần cài đặt phiên bản 4.7 của gfortran từ ppa bạn đã sử dụng cho gcc 4.7. Phiên bản gfortran nào bạn có bây giờ?
rfindeis

Tôi cần sử dụng thủ thuật tương tự như cài đặt gcc-4.7 để cài đặt gfortran-4.7.
người dùng

9

Giải thích thêm một chút về câu trả lời của Cloud Oliver.

Tìm hiểu phiên bản gcc hiện đang được sử dụng thông qua lệnh này.

$sudo update-alternatives --config gcc

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

Mục nhập *cho biết phiên bản GCC nào đang được sử dụng. Chỉ cần nhấn enter để giữ các cài đặt hiện tại.

Nếu nó in "không có lựa chọn thay thế cho gcc", bạn có thể phải sử dụng lệnh này để tìm ra phiên bản:

apt-cache policy gcc
  1. cd vào thư mục gcc bên phải (thay thế số phiên bản bằng của bạn):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. Bạn có thể tìm kiếm libgfortran.abằng lệnh sau (tùy chọn). Trong trường hợp của tôi, nó đã có mặt trong /usr/lib/gcc/x86_64-linux-gnu/4.8/thư mục.

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Tạo liên kết tượng trưng:

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

7

Những gì tôi đã làm, tôi kiểm tra trên Ubuntu nếu các phiên bản của g ++, gcc và g có giống nhau hay không.

Tôi đoán sẽ tốt hơn nếu bạn có cả ba phiên bản giống nhau.

# 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

Đối với tôi, điều này đã giải quyết tất cả các vấn đề mà tôi gặp phải khi cài đặt gói "TTR" trong R bằng RStudio trên Ubuntu.


1
Đây là giải pháp chính xác. Không có giải pháp nào ở trên làm việc cho tôi
Yonatan Simson

1
Tôi đang trên gcc 6.5, nhưng các phương pháp tương tự đã giải quyết vấn đề. Thật thú vị, cùng một nguồn: một gói R tối nghĩa.
Ufos

Vâng, đây là một giải pháp tốt nhất tôi có thể nghĩ ra.
Manoj Kumar

4

Giải pháp:

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

Bạn có thể làm cho nó dài dòng hơn một chút? Có lẽ một cddòng riêng ít nhất?
Volker Siegel

2
Vui lòng thêm một lời giải thích. Mọi người không bao giờ nên mù quáng chạy các lệnh họ tìm thấy trên internet. Vì vậy, xin vui lòng cũng không viết chúng.
s3lph

Cảm ơn bạn, điều này đã giải quyết nó cho tôi! Trong trường hợp của tôi, đó là cd /usr/lib/gcc/x86_64-linux-gnu/4.9.3và sau đó sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Zhubarb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.