跳至内容

在64位ubuntu下解决缺失libg2c0.0的问题

10月 23, 2010

本来这应该算是老生常谈,然而每每都会有人问起,所以干脆写一点东西记录下来备用。
该问题常常出现在用现代系统来连接老fortran程序的时候,或者说是执行很早之前编译连接出来的(可执行)二进制文件的时候。

大概症状就是编译代码,或者执行二进制文件的时候系统报错说找不到链接库:
libg2c0.so.0: cannot open shared object file: No such file or directory
云云。

用fortran时间比较长的童鞋们大概都知道在一年战争的时候GCC(Gnu Compiler Collection)的fortran前端还是g77,后来因为g77的作者退出江湖冻结了开发,从2005年开始前端换成了gfortran,之后各大linux发行版就开始逐渐停止提供对g77的支持了。就ubuntu而言从8.04(不含)之后就已经停止提供g77和libg2c的库了。所以如果你的系统版本比较新的话,多半会出这个问题。

解决方案非常之简单,缺什么装什么……

对于32位系统而言,直接去老版本的库中找一个现成的包装上就可以,
当然之前你要有相应的依赖, 比如说gcc, g77, libc6之类。如果你在用老程序的makefile,你多半要用到g77,对于ubuntu来说,可以到hardy的库http://packages.ubuntu.com/hardy/g77下载一个deb包,cd到你下载的目录,安装:
sudo dpkg-i g77_3.4.6-31ubuntu3_i386.deb

之后到http://packages.ubuntu.com/hardy/libg2c0 下载并安装
sudo dpkg -i libg2c0_3.4.6-6ubuntu3_i386.deb
(大概就)可以了

如果你在自己在用g77编译程序的话推荐再去 http://packages.ubuntu.com/hardy/libg2c0-dev下载并安装:
sudo dpkg -i libg2c0-dev_3.4.6-6ubuntu3_i386.deb

但是如果你和Y某一样在用64位的系统,就没那么简单了,当然,你还可以如法炮制的去下几个hardy的64位的包之后装上,不过,对于5年甚至更早以前的二进制程序而言,多数程序是在32位系统下编译连接的,64位的包(按理说)会将32位的库也装上,然而在我这里不成功(少装了两个文件),另一方面,你如果想要直接装32位的库的话,系统又会报错说架构冲突。所以只能手动:
首先去下载32位libg2c0的deb包,解压到当前目录:

dpkg –extract libg2c0_3.4.6-6ubuntu3_i386.deb ./

cd ./usr/lib/

sudo cp ./*  /usr/lib32/

之后再人工建立符号链接:
cd /usr/lib32/

ln -s libg2c0.so.0.0 libg2c0.so.0

ln -s libg2c.so.0 libg2c.so
大概就可以了,至少运行g77的二进制程序文件应该问题不大。 若还有什么问题的话,可以试着用类似的方法,手动装libg2c0-dev

当然,这些都只能算是权宜之计,最好的办法还是直接用新的编译器(比如gfortran)来编译连接你的源代码(如果有的话 …我就经常得不到源代码)

ps: wordpress的默认字体好弱,0(零)和o(小写字母O)长的几乎一点区别没有……

No comments yet

留下评论