我正在努力让Arpack和Arpack ++在Windows 7中使用Visual Studio 2010,并使用swig创建一个可以与C#一起使用的界面。这基本上是为了创建一个基准,我将用它来衡量用C#解决特征向量问题的所有进一步尝试,但首先我需要这个工作。
我已经设法使用this guide编译Arpack,虽然稍有改动,因为g77不再是MinGW附带的Fortran编译器,而是我们得到了gfortran。对ARmake.inc
的进一步更改包括注释-cg89
选项,这会产生错误(我不知道这个用g77填充的目的,但gfortran不接受它)。
进一步遵循指南,思考“至少它现在已经编译,有或没有选项。”我继续dllwrap
。但是,未接受-lg2c
选项,因为较新版本的MinGW中不包含库文件libg2c
。如果我尝试没有该选项,我会收到来自我的.o
和相应.f
文件的未定义引用的错误。我应该使用哪些库文件?我做了别的明显错误吗?
答案 0 :(得分:1)
我发现密钥似乎是使用gfortran
而不是dllwrap
。这是我在安装MinGW和msys后使用的整个过程
1)运行安装后脚本并确保它没有抱怨缺少gcc等。如果是,请安装这些软件包。
msys\1.0\postinstall\pi.bat
2)将ARPACK文件和补丁提取到msys\1.0\home\yourname\ARPACK
3)修改ARmake.inc
并将FC
和FFLAGS
行更改为:
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.dll
,libgfortran-3.dll
,libquadmath-0.dll
,您可以从MinGW安装中获取。