【问题标题】:Arpack(++) on windowsWindows 上的 Arpack(++)
【发布时间】:2013-08-04 19:37:38
【问题描述】:

我正在尝试让 Arpack 和 Arpack++ 在带有 Visual Studio 2010 的 Windows 7 中工作,并使用 swig 制作可与 C# 一起使用的界面。这基本上是为了创建一个基准,我将根据它来衡量使用 C# 解决特征向量问题的所有进一步尝试,但首先我需要它工作。

我已经设法使用this guide 编译了 Arpack,尽管由于 g77 不再是 MinGW 附带的 Fortran 编译器,我们得到了 gfortran,所以做了些许改动。对ARmake.inc 的进一步更改包括注释掉-cg89 选项,这会产生一个错误(我不知道它用g77 填充的目的是什么,但gfortran 不接受它)。

进一步遵循指南,认为“至少它现在已经编译,有或没有选项。”我继续dllwrap。但是,-lg2c 选项未被接受,因为库文件 libg2c 不包含在较新版本的 MinGW 中。如果我尝试不使用该选项,我会从我的一些.o 和相应的.f 文件中收到有关未定义引用的错误。我应该使用哪些库文件?我是否在做其他明显错误的事情?

【问题讨论】:

    标签: arpack


    【解决方案1】:

    我发现密钥似乎是使用gfortran 而不是dllwrap。这是我安装MinGW和msys后使用的整个过程

    1) 运行安装后脚本并确保它不会抱怨缺少 gcc 等。如果有,请安装这些包。

    msys\1.0\postinstall\pi.bat
    

    2) 解压ARPACK文件和补丁到msys\1.0\home\yourname\ARPACK

    3) 编辑ARmake.inc 并将FCFFLAGS 行更改为:

    FC      = gfortran
    #FFLAGS = -O -cg89
    

    4) 编辑UTIL/second.f 并用它替换所有内容。这可以防止有关 ETIME 的错误。不确定它的作用,但它是由 http://blog.csdn.net/guillotine007/article/details/8636647 建议的

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

    5) 编译成 .o 文件

    make lib
    

    6) 使用 gfortran 代替 dllwrap 来链接和创建 dll

    gfortran -shared BLAS/*.o LAPACK/*.o SRC/*.o UTIL/*.o -o arpack_win32.dll
    

    7) 生成的 dll 依赖于其他 3 个 dll:libgcc_s_dw2-1.dlllibgfortran-3.dlllibquadmath-0.dll,您可以从 MinGW 安装中获得。

    【讨论】:

    • 我完全忘记了我这个问题还没有解决。谢谢您的意见。我自己用dllwrap解决了这个问题,结果在新版本的MinGW中,命令-lg2c要与-lgfortran交换,大概是链接到libgfortran-3.dll库。
    • 更好。下次要重新编译时,答案也会提醒我。
    • 你好,你有没有编译过的库?我想计算一些条件数,但因此我不愿意安装 mingw。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2016-06-20
    • 1970-01-01
    • 2018-02-08
    • 2010-12-29
    • 2015-02-02
    相关资源
    最近更新 更多