• ARPACK在window visual Studio的安装配置


        ARPACK是一个求解大规模稠密/稀疏矩阵问题的库,最近在做特征值问题时用到。ARPACK这库相当古老,最早是RICE的一帮人弄的。LAPACK也差不多,貌似是美帝某个.gov发起的。这俩源代码是Fortran,最近论文一个项目需要移植到Windows平台下。方法是C语言的就用VS,Fortran的用MinGW的gFortran编译之,然后打成dll和lib。如果想要更高级点,还有配置ARPACK++。下面谈谈具体怎么配置:

        

    1. 下载

    ARPACK库:下载arpack96和对应的patch。ARPACK自带BLAS和LAPACK,没有依赖问题。

    MinGW: 下载一个installer。比如我下的是mingw-get-inst-20120426.exe。

    2.安装MinGW

    执行MinGW安装程序选择目录,比如我的安装目录是C:MinGW。记得至少得勾上C++,gfortran编译器和MSYS。

    装完以后别忘了附加环境变量PATH:C:MinGWin。

    3.解压并改动ARPACK源码

    先把arpack96.tar.gz解压,比如我的ARPACK目录是E:ARPACK。

    将patch.tar.gz解压至ARPACK目录并覆盖。

    然后纠结的来了,这里有三个文件要修改,不改动会导致现代gfortran编译不过。

    第一个是ARPACKUTILsecond.f,里面的ETIME遍不过。整个子过程可以替换成:

    SUBROUTINE SECOND( T )
        REAL      T
        CALL CPU_TIME(T)
        RETURN
    END

    第二个是ARPACKBLASdnrm2.f,里面的ASSIGN遍不过。不过我们可以在netlib上找到BLAS里最新版本的dnrm2.f。下载并直接覆盖之。

    第三个是ARPACKBLASsnrm2.f,问题同上,找到最新版本的snrm2.f覆盖。

    4.改动ARPACKARmake.inc

    里面需要改动的有3处:

    home = e:/ARPACK (改成自己的ARPACK目录)

    FC = gfortran

    FFLAGS = -O2

    5.编译&打包&VS2010配置

    打开MinGW Shell,先

    mount
    cd e:
    cd ARPACK/  (自己的ARPACK目录)
    make lib
    dllwrap --export-all-symbols BLAS/*.o LAPACK/*.o SRC/*.o UTIL/*.o -lgfortran --output-def arpack_win32.def -o arpack_win32.dll

    出现warning无视。然后打开VS2010程序目录下Visual Studio Tools里面的Visual Studio命令提示(2010),

    e:
    cd ARPACK 
    lib /machine:i386 /def:arpack_win32.def

    我们需要的就是ARPACK目录下生成的.dll和.lib。

    VS2010配置就简单了:

    项目属性->配置属性->链接器->常规->附加库目录中添加lib文件夹目录;

    项目属性->配置属性->链接器->输入->附加依赖项中添加arpack_win32.lib;

    项目属性->配置属性->C/C++->代码生成->运行库选成/MTd(或/MT);

    在自己的$(SolutionDir)Debug或$(SolutionDir)Release中添加arpack_win32.dll,以及MinGWBin下面的libgfortran-3.dll和libquadmath-0.dll。

    用MinGW build之后再用VS2010的lib.exe打包,好像就会产生这种依赖,这在MinGW编译LAPACK中也有提及。在用f2c转换的LAPACK的VS2005版本中就没有这个问题,令人非常不爽(节操君)。不管怎么样好用就行了,效率应该也没影响。

  • 相关阅读:
    软件测试流程
    Python2 RF(3.0.4)与Python3 RF(3.1.2)区别
    Ubuntu Install RobotFramework with Python3
    Beta测试与Alpha测试有什么区别
    网络协议,如TCP/UDP的区别?
    缺陷相关知识
    linux_machine-id
    monkey自定义脚本实践
    Monkey事件
    Linux虚拟机fdisk分区
  • 原文地址:https://www.cnblogs.com/zeze/p/5959520.html
Copyright © 2020-2023  润新知