找不到-lgfortran


12

我正在尝试在R中安装一个软件包(软件包“ ks”)。它失败,并显示错误消息:

/usr/bin/ld: cannot find -lgfortran

我已经安装了Ubuntu软件包build-essential:

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通用Pae

谁能提供建议,为什么ld不起作用?


1
您试图建立针对运行时库的符号链接,而不是链接程序所需的链接(* .a开发库)。看起来像路径问题。
Andrejs Cainikovs

Answers:


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

看起来像是有效答案。
Andrejs Cainikovs

对4.7编译器进行符号链接4.6库可能有效。也传递正确的路径-L(大致相同)。如果失败,则需要从用于gcc 4.7的ppa安装4.7版本的gfortran。您现在有什么gfortran版本?
rfindeis 2013年

我需要使用与安装gcc-4.7相同的技巧来安装gfortran-4.7。
用户

9

关于Cloud Oliver答案的更多解释。

通过此命令找出当前正在使用的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

对我来说,这解决了我在Ubuntu上使用RStudio在R中安装“ TTR”软件包时遇到的所有问题。


1
这是正确的解决方案。上述解决方案都不适合我
Yonatan Simson

1
我使用的是gcc 6.5,但是相同的方法解决了该问题。有趣的是,相同的来源:晦涩的R包。
Ufos

是的,这是我能想到的最佳解决方案。
Manoj Kumar,

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至少是单独的一行?
Volker Siegel

2
请添加说明。人们永远不要盲目运行在互联网上找到的命令。所以也请不要写它们。
s3lph 2014年

谢谢,这为我解决了!在我的情况下,是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
朱巴布(Juzhub)2017年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.