43

我正在尝试安装软件包 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。我需要什么来解决这个问题?

4

11 回答 11

63

尝试在 Ubuntu 12.10 64 位上安装 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 修复了我的额外错误。

于 2013-03-21T06:32:55.517 回答
35

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

 $ sudo apt-get install r-base-dev

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

于 2011-06-10T12:54:22.427 回答
13

看起来其他建议已经解决了您的问题,但您的问题也适用于我,但在我的情况下解决方案有所不同。我的问题是我的 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。

于 2014-09-26T16:40:24.647 回答
8

在 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

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

于 2014-06-09T18:01:07.897 回答
8

我使用 Centos,但无法获得 r-base-dev。我还安装了 gfortran,它的版本与 gcc 和 g++ 相匹配;它仍然没有工作。但是,我通过创建~/.R/Makevars,使用解决了这个问题

cd ~
mkdir .R
touch Makevars

我通过以下方式找到了安装 gfortran 的目录(显然问题是 R 找不到它)

which gfortran

它说我在usr/bin/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 包。

于 2018-03-29T04:41:53.793 回答
3

对于在 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
于 2019-06-20T14:24:49.757 回答
2

只是将其留在这里以供将来参考,就我的情况(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
于 2019-01-07T16:58:12.270 回答
2

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

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

于 2019-09-03T10:15:08.267 回答
0

如果您使用 gcc44,则需要:

yum install gcc44-gfortran
于 2014-09-08T20:25:41.847 回答
0

对于未来迷失的灵魂,它还有助于验证编译器版本是否完全匹配(根据https://askubuntu.com/questions/276892/cannot-find-lgfortran)。在我的例子中,gcc 和 gfortran 都是 4.8.4,但 g++ 是 4.6。

于 2016-11-30T02:44:06.950 回答
-1

作为 Megatron 对 Mac homebrew 的回答的后续,我在依赖项方面遇到了类似的问题:

错误:包“openssl”的配置失败<br />删除“/usr/local/lib/R/4.1/site-library/openssl”<br /> install.packages 中的警告:
安装包“openssl”没有-零退出状态

刚刚输入brew install opensslbash 并在下一个packages.install上运行。

于 2021-11-02T21:48:25.477 回答