【问题标题】:how to install Fortran -dev package using sudo yum install如何使用 sudo yum install 安装 Fortran -dev 包
【发布时间】:2017-07-25 03:36:12
【问题描述】:

我已经安装了 (GCC) 4.7.2 20121015 (Red Hat 4.7.2-5) 并且 jave 也安装了 yum install gcc-gfortran 。 (包gcc-gfortran-4.4.7-18.el6.x86_64)

但我收到如下错误:

/usr/bin/ld: cannot find -lgfortran
collect2: error: ld returned 1 exit status
make: *** [quadprog.so] Error 1

请帮助我安装 -lgfortran。看来我需要安装“提供 Fortran 库的 Fortran -dev 包”。我不知道如何在 RedHat/CentOS 中做到这一点。请帮忙。我很难做到这一点。

我尝试使用以下方法安装 libgfortran:

yum install libgfortran

但它说:

软件包 libgfortran-4.4.7-18.el6.x86_64 已安装且最新版本 没事做 (在交互式会话中运行,跳过干净步骤。)

更多信息: 我尝试为 R 安装软件包 quadprog,以下是日志:

install.packages('https://cran.cnr.berkeley.edu/src/contrib/quadprog_1.5-5.tar.gz',dependencies = TRUE,repos = NULL,type ="source")
Installing package into '/usr/lib64/R/library'
(as 'lib' is unspecified)
trying URL 'https://cran.cnr.berkeley.edu/src/contrib/quadprog_1.5-5.tar.gz'
Content type 'application/x-gzip' length 33651 bytes (32 KB)
==================================================
downloaded 32 KB

* installing *source* package 'quadprog' ...
** package 'quadprog' successfully unpacked and MD5 sums checked
** libs
gfortran -m64  -fvisibility=hidden -fpic  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I/usr/lib64/gfortran/modules  -c aind.f -o aind.o
gcc -m64 -std=gnu99 -I/usr/include/R -DNDEBUG   -I/usr/local/include   -fpic  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fpic -fPIC   -c init.c -o init.o
gfortran -m64 -fvisibility=hidden -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I/usr/lib64/gfortran/modules -ffloat-store   -c -o solve.QP.compact.o solve.QP.compact.f
solve.QP.compact.f:254.3:

 72   if (nvl .EQ. 0) then                                              
   1
Warning: Label 72 at (1) defined but not used
solve.QP.compact.f:302.2:

 7       t1inf = .FALSE.                                                
  1
Warning: Label 7 at (1) defined but not used
solve.QP.compact.f: In function 'qpgen1':
solve.QP.compact.f:94: warning: 'it1' may be used uninitialized in this function
solve.QP.compact.f:98: warning: 't1' may be used uninitialized in this function
gfortran -m64 -fvisibility=hidden -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I/usr/lib64/gfortran/modules -ffloat-store   -c -o solve.QP.o solve.QP.f
solve.QP.f:245.3:

 72   if (nvl .EQ. 0) then                                              
   1
Warning: Label 72 at (1) defined but not used
solve.QP.f:293.2:

 7       t1inf = .FALSE.                                                
  1
Warning: Label 7 at (1) defined but not used
solve.QP.f: In function 'qpgen2':
solve.QP.f:85: warning: 'it1' may be used uninitialized in this function
solve.QP.f:89: warning: 't1' may be used uninitialized in this function
gfortran -m64  -fvisibility=hidden -fpic  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I/usr/lib64/gfortran/modules  -c util.f -o util.o
gcc -m64 -std=gnu99 -shared -L/usr/lib64/R/lib -o quadprog.so aind.o init.o solve.QP.compact.o solve.QP.o util.o -L/usr/lib64/R/lib -lRblas -lgfortran -lm -lgfortran -lm -L/usr/lib64/R/lib -lR
/usr/bin/ld: cannot find -lgfortran
collect2: error: ld returned 1 exit status
make: *** [quadprog.so] Error 1
ERROR: compilation failed for package 'quadprog'
* removing '/usr/lib64/R/library/quadprog'
Warning message:
In install.packages("https://cran.cnr.berkeley.edu/src/contrib/quadprog_1.5-5.tar.gz",  :
  installation of package '/tmp/Rtmpry5XTG/downloaded_packages/quadprog_1.5-5.tar.gz' had non-zero exit status

编辑:

bash-4.1# rpm -ql libgfortran
/usr/lib64/libgfortran.so.3
/usr/lib64/libgfortran.so.3.0.0

【问题讨论】:

  • yum install libgfortran 应该安装它
  • 我刚刚试过这个:在这个链接上找到centos.pkgs.org/7/centos-x86_64/…。但是它已经安装了。我仍然遇到同样的错误
  • 请提出建议
  • 分享你的编译命令,你指定-L标志指向libgfortran
  • 我做了 yum install libgfortran 。这就是你要问的?

标签: linux gcc linker centos shared-libraries


【解决方案1】:

你给我们看了这个:

# type -a gcc

 gcc is /opt/centos/devtoolset-1.1/root/usr/bin/gcc 
 gcc is /usr/bin/gcc'

这意味着您已经安装了 Red Hat Developer Toolset 并使用 scl enable 或类似的命令为这个 shell 启用了它。你还需要吗?如果没有,我建议禁用它。

如果您需要 DTS,则必须从 DTS 1.1 安装 Fortran 编译器,使用:

yum install devtoolset-1.1-gcc-gfortran

(或者直接从here 下载它,这似乎是您获得 DTS 编译器的存储库。)

这将安装与您配置的 gcc 编译器兼容的 Fortran 编译器。没有它,系统 Fortran 编译器和 DTS gcc 一起使用,这不起作用,因为 DTS gcc 命令(用于在您引用的构建过程中进行链接)无法从系统中找到 libgfortran.so 库Fortran 编译器。

或者,您可以通过卸载 DTS 编译器使两个编译器同步:

yum install devtoolset-1.1-gcc-gfortran

【讨论】:

  • 我认为我不需要这个。可能在尝试解决此问题时,我已经安装了它。我会禁用它。那么具体的解决方案是什么呢?
  • 禁用 DTS,或安装 devtoolset-1.1-gcc-gfortran。任何一种方法都应该可以解决您的问题。
  • 好的。我正在做这个。将添加评论;让你知道它是否有效
  • 请回答这个问题;在做之前 yum install devtoolset-1.1-gcc-gfortran ;我需要禁用一些东西?如果是,我该如何禁用?否则我应该直接 yum install devtoolset-1.1-gcc-gfortran?
  • 可以直接安装包。
【解决方案2】:

以下编译行在/usr/lib64/R/lib 处寻找libgfortran,但该库不存在。因此,链接器错误。

gcc -m64 -std=gnu99 -shared -L/usr/lib64/R/lib -o quadprog.so aind.o init.o solve.QP.compact.o solve.QP.o util.o -L/usr/lib64/R/lib -lRblas -lgfortran -lm -lgfortran -lm -L/usr/lib64/R/lib -lR

因为我们无法定位和修改makefile。我们创建了一个符号链接 /usr/lib64/R/lib/libgfortran.so/usr/lib64/libgfortran.so.3 并重新运行安装步骤,它解决了链接器错误。

这是我们遵循的解决问题的解决方法

【讨论】:

  • 我不知道如何编辑这个makefile。请指导。
  • /usr/lib64 位于此发行版的默认链接器搜索路径上,因此不会产生影响。
  • @dlmeetei 有人建议“所以你有 Fortran 编译器。你仍然需要 Fortran -dev 包来提供你无法链接的 Fortran 库。我不知道 RedHat/CentOS 叫什么——在 Debian 下,对于 gcc-6 等 pp,它将是 libgfortran-6-dev。”如果这对您有任何意义,请提供帮助
  • 投反对票的人,请解释投反对票的原因?所以我可以改变,他的问题是没有将正确的位置传递给libgfortran
  • @Ashag,在你的问题中分享你的makefile,以便我们可以指出修改的地方
猜你喜欢
  • 2019-07-18
  • 2017-12-04
  • 2017-06-12
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
相关资源
最近更新 更多