24小时热门版块排行榜    

查看: 2036  |  回复: 29
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

田山东

捐助贵宾 (著名写手)

[求助] linux下安装arpack遇到阻力,求助:lurencyj请关注下,谢谢

系统:Linux version 2.6.37.1-1.2-desktop (geeko@buildhost) (gcc version 4.5.1 20101208 [gcc-4_5-branch revision 167585] (SUSE Linux) ) #1 SMP PREEMPT
gfortran编辑器,因为我在编辑的时候都是gfortran开头,所以认为是gfortran编辑器。
现在将我的安装过程写下来,请大家帮忙下:
下载arpack96.tar.z,patch.tar.z
解压:tar -zxvf arpack96.tar.z
tar -zxvf patch.tar.z
这两个文件在这个文件夹里:home/tianhongyu/arpack
解压之后产生一个文件夹:ARPACK
ls,找到里面的ARmake.inc,修改里面的参数,
vim ARmake.inc
被修改的参数如下:
home = /home/tianhongyu/arpack/ARPACK
PLAT = LINUX
#下面这条是从网上摘抄的,不知道这么写行不行
BLASdir      = /usr/local/share/BLAS
LAPACKdir    = /usr/local/share/lapack-3.1.1
UTILdir      = $(home)/UTIL
SRCdir       = $(home)/SRC

DIRS        = $(BLASdir) $(LAPACKdir) $(UTILdir) $(SRCdir)
ARPACKLIB  = $(home)/libarpack_$(PLAT).a
LAPACKLIB = /usr/local/lib/liblapack.a
BLASLIB = /usr/local/lib/libblas.a
FC      = gfortran
FFLAGS  = -O
MAKE    =/usr/bin/make
这个文件被我修改的只有这些,网上搜索发现,可能还需要修改:
1.需要安装两个库:
然后安装这个库
linux-1482:/usr/local/share/ARPACK # cd /usr/local/lib
linux-1482:/usr/local/lib # ln -s /usr/local/share/ARPACK/libarpack_LINUX.a ./libarpack.a
目前为止我有没有安装这个库?怎么安装呢?
2.有人给出7条弯路,我为了避免这些弯路,该怎么做呢?
编译Arpack所做过的蠢事
1. 没有将UTIL目录下second.f 中的ETIME变量的属性修改为INTRINSIC;
2. 没有将根目录下的Armake.in中make的路径修改为/usr/bin/make;
3. 没有将根目录下的Armake.in中PLAT修改为本地系统名;
4. 没有将根目录下的Armake.in中FC修改为本地的fortran编译器命令;
5. 运行make lib后, 测试EXAMPLE/SIMPLE/sssimp.f
    使用了:    f77 -L/data/home/XXX/ARPACK/ -larpack_linux -o ss sssimp.f
    而没有使用: f77 -o ss sssimp.f -L/data/home/XXX/ARPACK/ -larpack_linux
NOTE: sssimp.f文件中的include 'debug.h'最好注释掉,如果你不想拷贝一个debug.h到EXAMPLE/SIMPLE/下的话.

6. 在ARmake.in里面的FC编译器和以后编译程序的编译器不一致.
7. 使用gfortran编译器时,没有添加选项: -ff2c; 导致生成的库和fortran 77 不兼容.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
很着急啊,请大家帮忙支招吧。谢谢了!网友们,期待了!!
回复此楼
everythinghasitsseason.enjoyyourlife.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

引用回帖:
26楼: Originally posted by snoopyzhao at 2012-10-12 19:05:27
你当时没有修改 second.f 吗?
实在不行,把那个 etime 改成 Fortran 95 内置的函数 cpu_time 算了……...

second.f找到了。把etime改成cpu_time还是不行。      SUBROUTINE SECOND( T )
      REAL T
      CALL CPU_TIME(T)
      RETURN
      END
再一次编译EXAMPLE下某个程序会出现这种错误:
/tmp/ccdi4uxo.o: In function `MAIN__':
dndrv2.f.text+0x31b): undefined reference to `dgttrf_'
dndrv2.f.text+0x693): undefined reference to `dgttrs_'
/home/tianhongyu/arpack/ARPACK/libarpack_LINUX.a(second.o): In function `second_':
second.f.text+0x11): undefined reference to `etime_'
collect2: ld returned 1 exit status
windows下有人安装了,这种方法,不知道是否可以用在linux下,因为有很多人在linux下装过arpack都没这么搞过,所以不确定啊:
先到ARPACK的官方网站去下载程序包,我选择下载了 arpack96.tar.gz 和补丁 patch.tar.gz。
1. 把两个压缩文件分别解压以后,第一步是先打上补丁。复制patch下的ARPACK 粘贴到 arpack96 里面去覆盖同名文件, 在Win7上会提示合并文件夹,选择是,然后会提示复制和替换文件,选择全部替换就行了。
2. 把 arpack96\ARPACK\BLAS,arpack96\ARPACK\LAPACK 和 arpack96\ARPACK\UTIL 中的 *.f 文件都复制到 arpack96\ARPACK\SRC 里面去。然后有三个源文件需要改动。首先,找到second.f 打开,把里面的内容改成:
      SUBROUTINE SECOND( T )
      REAL T
      CALL CPU_TIME(T)
      RETURN
      END
保存。因为原来的程序要调用ETIME来返回时间,但是连接的时候会出错提示找不到ETIME。我看了一下gfortran 里好像是用 CPU_TIME 来计时的,所以就改过来。还有就是 dnrm2.f 和 snrm2.f 使用了ASSIGN statement, 这个语句在Fortran 95 的标准里面已经被删除了,所以gfortran 不能编译这两个文件。因此,需要到netlib上下载它们的更新版本: dnrm2.f 和 snrm2.f 并替换旧版文件。
3. 接下来编译ARPACK和LAPACK基本原理是类似的。用DOS进入 arpack96\ARPACK\SRC 目录,用gfortran 开始编译:
E:\arpack96\ARPACK\SRC>gfortran -fimplicit-none -g -c *.f -O2
4. 用ar 连接成一个库
E:\arpack96\ARPACK\SRC>ar rcs libarpack.a *.o
这样就在SRC文件夹里得到ARPACK库文件 libarpack.a。

everythinghasitsseason.enjoyyourlife.
28楼2012-10-12 20:14:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 30 个回答

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2012-10-12 00:42:12
田山东: 金币+4, ★★★★★最佳答案 2012-10-12 16:37:13
最后一条真胡扯, -ff2c 是个什么东西,难道是 -lf2c?如果没有记错的话, f2c 是将 fortran 77 程序转成 c 之后,调用 gcc 进行编译的一种手法

gfortran 是正宗的 fortran 编译器,兼容 fortran 77,只要参数合适,一般不会有什么问题……

话说,安装 arpack,你参考 arpack 官方网站上的文档不可以吗?如果是一些比较主流的发行版,这应该有可直接安装的包……
2楼2012-10-11 21:54:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

引用回帖:
2楼: Originally posted by snoopyzhao at 2012-10-11 21:54:00
最后一条真胡扯, -ff2c 是个什么东西,难道是 -lf2c?如果没有记错的话, f2c 是将 fortran 77 程序转成 c 之后,调用 gcc 进行编译的一种手法

gfortran 是正宗的 fortran 编译器,兼容 fortran 77,只要参数合 ...

不行啊,摸索好久了。郁闷着呢、
everythinghasitsseason.enjoyyourlife.
3楼2012-10-11 22:57:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

引用回帖:
3楼: Originally posted by 田山东 at 2012-10-11 22:57:06
不行啊,摸索好久了。郁闷着呢、...

这个程序不难安装啊,看了一下那个 README 和 ARmake.in

可能唯一需要注意的是 second.f 中的 ETIME 函数,不过 gfortran 好象支持这个函数,你把 external etime 那行去掉就可以了。

有问题,把具体的问题贴出来,就那么几个参数,折腾几下就应该可以了……
4楼2012-10-12 08:54:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见