zoukankan      html  css  js  c++  java
  • 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版本中就没有这个问题,令人非常不爽(节操君)。不管怎么样好用就行了,效率应该也没影响。

  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/zeze/p/5959520.html
Copyright © 2011-2022 走看看