LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1300|回复: 7

求助:SUSE计算集群上编译LAPACK数学库时ld链接失败。。。

[复制链接]
发表于 2010-5-17 23:35:33 | 显示全部楼层 |阅读模式
大家好,
本人在SUSE计算集群上,用普通账户,编译LAPACK数学库,下面是详细的安装步骤:
////////////////////////////////////////////////////////////////////////
///////
>tar xf lapack-3.1.1.tgz
>cd lapack-3.1.1/
>cp make.inc.example make.inc
>make
( cd INSTALL; make; ./testlsame; ./testslamch; \
  ./testdlamch; ./testsecond; ./testdsecnd; ./testversion )
make[1]: Entering directory `/work/home1/suwit/sources_for_meep/lapack-3.1.1/INSTALL'
g77  -funroll-all-loops -O3 -c lsame.f -o lsame.o
g77  -funroll-all-loops -O3 -c lsametst.f -o lsametst.o
g77  -o testlsame lsame.o lsametst.o
/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../../x86_64-suse-linux/bin/ld: cannot find -lgcc_s
make[1]: *** [testlsame] Error 1
make[1]: Leaving directory `/work/home1/suwit/sources_for_meep/lapack-3.1.1/INSTALL'
/bin/sh: ./testlsame: No such file or directory
/bin/sh: ./testslamch: No such file or directory
/bin/sh: ./testdlamch: No such file or directory
/bin/sh: ./testsecond: No such file or directory
/bin/sh: ./testdsecnd: No such file or directory
/bin/sh: ./testversion: No such file or directory
make: *** [lapack_install] Error 127

>g77 -v
Reading specs from /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info

--mandir=/usr/share/man --enable-languages=c,f77 --disable-checking --libdir=/usr/lib64 --disable-libgcj --with-

slibdir=/lib64 --with-system-zlib --enable-shared --enable-__cxa_atexit x86_64-suse-linux
Thread model: posix
gcc version 3.3.5 20050117 (prerelease) (SUSE Linux)
>ld -v
GNU ld version 2.16.91.0.5 20051219 (SUSE Linux)
///////
////////////////////////////////////////////////////////////////////////
弄了半个多月了,还是没有解决这个问题。。。
哪位朋友帮忙看看吧,给我提供一些建议,谢谢你们了!!
发表于 2010-5-18 13:59:53 | 显示全部楼层
/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../../x86_64-suse-linux/bin/ld: cannot find -lgcc_s
确认一下是否有libgcc_s.so这个文件

我这个是opensuse 11.2 32位,安装libgcc44-4.4.1_20090817的rpm包,这个包提供了/lib/libgcc_s.so.1

ls -l /usr/lib/gcc/i586-suse-linux/4.4/libgcc_s.so
/usr/lib/gcc/i586-suse-linux/4.4/libgcc_s.so -> /lib/libgcc_s.so.1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-19 02:02:30 | 显示全部楼层
>pwd
/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5
>ls
32 crtbeginS.o crtend.o f771 libgcc.a specs crtbegin.o crtbeginT.o crtendS.o include libgcc_eh.a

如你所说,在GCC3.3.5目录中没有libgcc_s.so文件。
难道是因为这个集群上有高版本的GCC4.4,所以就删除了低版本的libgcc_s.so(GCC3.3.5)?我应该把什么链接在这个目录下呢??
是高版本的libgcc_s.so?还是这个文件夹下的libgcc.a或者libgcc_eh.a???

Post by nhadct;2090841
/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../../x86_64-suse-linux/bin/ld: cannot find -lgcc_s
确认一下是否有libgcc_s.so这个文件

我这个是opensuse 11.2 32位,安装libgcc44-4.4.1_20090817的rpm包,这个包提供了/lib/libgcc_s.so.1

ls -l /usr/lib/gcc/i586-suse-linux/4.4/libgcc_s.so
/usr/lib/gcc/i586-suse-linux/4.4/libgcc_s.so -> /lib/libgcc_s.so.1
回复 支持 反对

使用道具 举报

发表于 2010-5-19 20:12:10 | 显示全部楼层
你这个suse是什么版本的?
看看/lib、/lib64/、/usr/lib、/usr/lib64下有没有类似libgcc_s.so.1之类的文件,查查它属于gcc4还是gcc3,如果有,就做个链接。如果没有,在安装源中查查有没有libgcc3x之类的包,这个包应该是提供这个文件的。

为什么不用gcc4编译?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-20 04:34:39 | 显示全部楼层
用gcc4提供的fortran编译器gfortran编译,会出现问题,所以只能用我要安装的那个软件说明的g77(f77)。。。而gcc4之前的fortran编译器就是g77(f77),所以我就找libgcc3x了。。。

/lib、/lib64/里都有libgcc_s.so
我做了个链接
ln -s /lib64/libgcc_s.so ~/lib/libgcc_s.so
并添加这个路径到环境变量LD_LIBRARY_PATH中
仍然错误。。。错误没有任何变化。。。


Post by nhadct;2091118
你这个suse是什么版本的?
看看/lib、/lib64/、/usr/lib、/usr/lib64下有没有类似libgcc_s.so.1之类的文件,查查它属于gcc4还是gcc3,如果有,就做个链接。如果没有,在安装源中查查有没有libgcc3x之类的包,这个包应该是提供这个文件的。

为什么不用gcc4编译?
回复 支持 反对

使用道具 举报

发表于 2010-5-20 10:05:06 | 显示全部楼层
Post by lsllsllsl;2091171
用gcc4提供的fortran编译器gfortran编译,会出现问题,所以只能用我要安装的那个软件说明的g77(f77)。。。而gcc4之前的fortran编译器就是g77(f77),所以我就找libgcc3x了。。。

/lib、/lib64/里都有libgcc_s.so
我做了个链接
ln -s /lib64/libgcc_s.so ~/lib/libgcc_s.so
并添加这个路径到环境变量LD_LIBRARY_PATH中
仍然错误。。。错误没有任何变化。。。

你确定这个libgcc_s.so是gcc3提供的吗?
rpm -qf /lib64/libgcc_s.so 可以查看这个文件属于哪包
如果是gcc3提供的,这样建链接试试:
ln -s /lib64/libgcc_s.so.1 /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/libgcc_s.so

lapack最新的3.2.1版本已经可以用gcc4编译了
回复 支持 反对

使用道具 举报

发表于 2010-5-21 12:36:03 | 显示全部楼层
楼主不妨试探下g77是否安装配置正确,写个hello.f,然后g77 -v hello.f,仔细看verbose模式下的编译器输出,尤其是每一行-L(库搜索路径)和-l(链接库),如果编译不成功,把编译输出保存下来分析-L和-l项,可以问你的系统管理员或发到坛子里来,另外/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5下面的库是gcc3提供的,(如果/usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5下面缺少某个库就说明gcc3安装配置错误,重新安装gcc3比较保险),/lib64下面的库是gcc4提供的(除非是很老版本的linux才有可能由gcc3提供系统库文件,但不能保证是gcc 3.3.5提供的),混用二者可能导致新的错误。为了避免不同版本的库文件冲突,gcc(整套编译器)默认的编译过程中由gcc自己搜索特定gcc版本默认的路径和文件,除非你用-I,-L以及-l等选项去篡改,而gcc的默认搜索路径和文件就只有/usr/include,/usr/lib(64),以及/usr/lib(64)/gcc-lib/*-linux/*.*/等目录,并不包含/lib(64),就算包含也排在/usr/lib(64)/gcc-lib/*-linux/*.*/的后面,不管你如何设置LD_LIBRARY_PATH里的顺序,也就是说把/lib(64)加入LD_LIBRARY_PATH对gcc的编译过程不起作用。/lib(64)目录里的文件的作用是提供运行库并不是用于链接的,往里面随便放文件不安全,从里面复制文件出来也没有多大用,我通过看了an introduction to gcc理解到特定版本的gcc对应特定版本的库文件,而且互不相干,
比如locate libgcc_s.so.1在我的机器上返回一大堆条目。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-22 04:50:05 | 显示全部楼层
非常感谢楼上二位的热心帮助!!
昨天给集群管理员说了问题,没想到管理员很快回复: 你要安装的软件(MEEP)已经被别的用户安装过了,由于有更多用户使用,决定将meep设为全局变量,设置完成后,请使用加载命令module load meep,就可以使用MEEP了。。。
我很无语啊。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表