构建R包和错误“ld:找不到-lgfortran”

时间:2011-06-10 05:10:37

标签: r ubuntu gfortran

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

* 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 --version GNU Fortran   (Ubuntu / Linaro 4.5.2-8ubuntu4)4.5.2

sudo ldconfig -v给出了错误

  

/sbin/ldconfig.real:无法统计/usr/lib/libgfortran.so:没有这样的文件或目录

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

10 个答案:

答案 0 :(得分:57)

尝试在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修复了我的附加错误。

答案 1 :(得分:26)

对于Debian / Ubuntu系列,我们通常建议

 $ sudo apt-get install r-base-dev

因为它提取了编译所需的所有包。并且这种方法一直在进行测试,因为自动化包构建器依赖于此(以及额外的每个包Build-Depends)。这里也列出了gfortran包;也许你之前安装的链接断了,所以我也试试dpkg --purge gfortran; apt-get install gfortran。也就是说,数十个R包(和R本身)使用Fortran,所以这里不应该有任何魔法。

答案 2 :(得分:11)

看起来其他建议已经解决了您的问题,但您的问题也适用于我,但解决方案在我的情况下有所不同。我的问题是我的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
    
  3. 在我的情况下,我只有一个版本的gfortran所以我只是改变了g ++和gcc版本以匹配gfortran。

答案 3 :(得分:8)

在ubuntu 12.04,R3.1.0。上安装R package minqa同样的问题,x86 32位(实际上它是插入符号包安装的一部分)。

解决方案

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

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

答案 4 :(得分:3)

我使用Centos而我无法获得r-base-dev。我还安装了gfortran,它的版本与gcc和g ++相匹配;它仍然没有奏效。但是,我通过使用

创建~/.R/Makevars来解决了这个问题
cd ~
mkdir .R
touch Makevars

我找到了安装gfortran的目录(显然问题是R无法找到它)

which gfortran

它说我在usr/bin/gfortran安装了gfortran。 然后我向.R/Makevars添加了标志,告诉R使用:

F77 = /usr/bin/gfortran
FC = $F77
FLIBS = -L/usr/bin/gfortran

您可以通过以下方式编辑Makevars文件:

vi .R/Makevars

现在您已输入可编辑文本文件的vi程序。输入i进行修改;您将在终端窗口的底部看到INSERT。然后你可以输入我上面提到的内容。要保存更改并退出vi,请按esc键,然后键入:wq

我不完全确定我是否正确放置FLIBS线,因为它与MacOS非常不同。在MacOS中,gfortran下有一个目录链接到的目录,但显然gfortran不是linux中的目录。至少这对我有用,也解决了/usr/bin/ld: cannot find -lquadmath的问题,所以我顺利安装了需要gfortran的R包。

答案 5 :(得分:1)

就像在我的案例(Amazon Linux EC2 AMI)中那样,将其留在此处以供将来参考,问题仅在于符号链接的命名而不是其位置。

sudo ln -s /usr/lib64/libgfortran.so.3 /usr/lib64/libgfortran.so
sudo ln -s /usr/lib64/libquadmath.so.0 /usr/lib64/libquadmath.so

答案 6 :(得分:1)

我不必安装任何库。发布对我有用的内容,也许对某人有用。

我有~/.R/Makevars定义要使用CC=gcc-8。 我的机器上的默认gcc是7.4.0,但是我安装了gcc-8。 同时,我没有gfortran 8,只有7.4.0。 注释掉Makevars中的这一行,会使编译回退到使用默认的gcc-7,然后成功使用gfortran-7 lib。

答案 7 :(得分:0)

如果您使用的是gcc44,则需要:

yum install gcc44-gfortran

答案 8 :(得分:0)

对于未来失去的灵魂,它还有助于验证所有匹配的编译器版本(每https://askubuntu.com/questions/276892/cannot-find-lgfortran)。在我的情况下,gcc和gfortran都是4.8.4,但g ++是4.6。

答案 9 :(得分:0)

对于在Mac上 遇到相同错误并到达此页面的任何人,请尝试以下操作:

安装Homebrew并运行:

brew install gcc

然后,创建一个包含内容的文件~/.R/Makevars(请注意,这对应于gcc版本9.1.0):

VER=-9
CC=gcc$(VER)
CXX=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/9.1.0/lib/gcc/9

  • R v3.6.0
  • gcc v9.1.0
  • 自制软件v2.1.6
  • macOS v10.14.5