build立R包得到错误“ld:找不到-lgfortran”

我正在尝试安装软件包。 Ubuntu 11.04 Natty 64位。 从build筑物我得到:

* installing *source* package âlarsâ ... ** libs gfortran -fpic -O3 -pipe -g -c delcol.f -o delcol.o gcc -shared -o lars.so delcol.o -lgfortran -lm -L/usr/lib64/R/lib -lR /usr/bin/ld: cannot find -lgfortran collect2: ld returned 1 exit status make: *** [lars.so] Error 1 ERROR: compilation failed for package âlarsâ 

gfortran被安装,当我运行gfortran --version我得到

gfortran – 版本GNU Fortran(Ubuntu / Linaro 4.5.2-8ubuntu4)4.5.2

sudo ldconfig -v给出错误

/sbin/ldconfig.real:不能stat /usr/lib/libgfortran.so:没有这样的文件或目录

我已经删除并重新安装gfortran。 我需要什么来解决这个问题?

对于Debian / Ubuntu系列,我们通常会推荐

  $ sudo apt-get install r-base-dev 

因为它牵涉编译通常需要的所有软件包。 而且这种方法一直在测试,因为自动化的包构建者依赖于这个(以及额外的每个包的构建依赖)。 gfortran包也列在这里; 也许你有一个从以前的安装断开的链接,所以我也想尝试dpkg --purge gfortran; apt-get install gfortran dpkg --purge gfortran; apt-get install gfortran 。 也就是说,数十个R包(和R本身)使用Fortran,所以这里不应该有什么魔法。

在尝试在Ubuntu 12.10 64bit上安装CRAN软件包VGAM时,我遇到了同样的问题。 我已经安装了r-base-dev,但Andrew Redd对Dirk Eddelbuettel的答案的第二个评论对我很有帮助。

具体来说,我得到了两个错误:

 /usr/bin/ld: cannot find -lgfortran /usr/bin/ld: cannot find -lquadmath 

哪些是由行固定的:

 sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so sudo ln -s /usr/lib/x86_64-linux-gnu/libquadmath.so.0 /usr/lib/libquadmath.so 

请注意,只有第一行才有必要照顾原来的帖子的问题。 第二行用lquadmath修正了我的额外错误。

看起来其他建议已经解决了你的问题,但你的问题也适用于我,但解决方案在我的情况是不同的。 我的问题是,我的gcc和g ++版本不同于我的gfortran版本。 我用下面的来切换它们,使它们都是一样的。

  1. 检查你有什么版本的gcc,g ++和gfortran:

     g++ --version gcc --version gfortran --version 
  2. 匹配他们,使他们都是一样的:

     sudo update-alternatives --config g++ sudo update-alternatives --config gcc sudo update-alternatives --config gfortran 

在我的情况下,我只有一个版本的gfortran,所以我只是改变了g ++和gcc版本,以匹配gfortran。

同样的问题在Ubuntu 12.04,R3.1.0。,x86 32位(实际上它是插入程序包安装的一部分)上安装R软件包minqa。

解决

  sudo ln -s /usr/lib/i386-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so 

r-base-dev重新安装不起作用,我没有尝试重新安装gfortran,因为所有的依赖关系。

根据系统/版本,

  ls -l /usr/lib/libgfortran.so 

检查链接是否存在/是否正确。

如果你使用gcc44,你需要:

 yum install gcc44-gfortran 

为了将来失去灵魂,它也有助于验证编译器版本全部匹配(按照https://askubuntu.com/questions/276892/cannot-find-lgfortran )。 在我的情况下,gcc和gfortran都是4.8.4,但是g ++是4.6。