如何使用sudo yum install安装Fortran -dev包

时间:2017-07-25 03:36:12

标签: linux gcc linker centos shared-libraries

我已经安装了(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 -dev包提供Fortran库"。我不知道如何在RedHat / CentOS中这样做。请帮忙。我很难做到这一点。

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

yum install libgfortran

但它说:

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

更多信息: 我尝试为R安装package 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

2 个答案:

答案 0 :(得分:1)

你向我们展示了这个:

# type -a gcc

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

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

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

yum install devtoolset-1.1-gcc-gfortran

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

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

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

yum install devtoolset-1.1-gcc-gfortran

答案 1 :(得分:0)

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

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并重新运行安装步骤,它解决了链接器错误。

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