Build ARPACK x64 with MinGW
1. 准备工具
MSYS2 https://www.msys2.org/
在msys中安装make程序
pacman -S msys/make
成功后可以用
make -v 查看是否安装成功
MinGW64位: 在MSYS2上直接在线安装
输入:pacman -S mingw-w64-x86_64-toolchain
选择了3)和5)
安装结束后,在msys65目录下出现
打开mingw64.exe后,可查看安装是否成功
1) gcc -v
2) gfortran --version
2. 准备ARPACK项目文件
ARPACK https://www.caam.rice.edu/software/ARPACK/download.html#ARPACK
1)下载arpack96
2) 下载patch
3 编译Arpackx64
将patch中的内容覆盖到arpack96中
修改3个文件
-
ARPACK\UTIL\second.f 删除 EXTERNAL ETIME 这一行
-
ARPACK\BLAS\dnrm2.f 在netlib上找到BLAS里最新版本的dnrm2.f。下载并直接覆盖
-
ARPACK\BLAS\snrm2.f 找到最新版本的snrm2.f覆盖
修改ARPACK目录下ARmake.inc文件
home = G:/ARPACK PLAT = x64 FC = gfortran FFLAGS = -w -fallow-argument-mismatch -O2
打开mingw64.exe进入自己的目录
cd: g:/arpack
生产.a文件
make lib
Administrator@TL-20180915HCBU MINGW64 /g/ARPACK $ make lib Making lib in G:/ARPACK/BLAS make[1]: Entering directory '/g/ARPACK/BLAS' Makefile:69: warning: overriding recipe for target '.f.o' ../ARmake.inc:95: warning: ignoring old recipe for target '.f.o' gfortran -O -c isamax.f gfortran -O -c sasum.f gfortran -O -c saxpy.f gfortran -O -c scopy.f gfortran -O -c sdot.f gfortran -O -c snrm2.f gfortran -O -c srot.f gfortran -O -c srotg.f gfortran -O -c sscal.f gfortran -O -c sswap.f gfortran -O -c sgemv.f gfortran -O -c sger.f gfortran -O -c ssymv.f gfortran -O -c ssyr2.f gfortran -O -c strmm.f gfortran -O -c sgbmv.f ar rv G:/ARPACK/libarpack_x64.a isamax.o sasum.o saxpy.o scopy.o sdot.o snr
会生成一个libarpack_x64.a文件,并将所有的.f文件生成.o,
生成def和dll文件
dllwrap --export-all-symbols BLAS/*.o LAPACK/*.o SRC/*.o UTIL/*.o -lgfortran --output-def arpack_x64.def -o arpack_x64.dll
生成以下两个文件
此处可以查看是否生成的dll位x64 在cmd中输入dumpbin.exe /headers 文件路径
生成lib库文件
本人使用vs2017,win10
直接搜索
vs2015搜x64的,打开后输入ARPACK的目录
cd G:\ARPACK
然后输入
lib /machine:X64 /def:arpack_x64.def
即可编译出lib文件
遇到的问题
Rank mismatch between actual argument at (1) and actual argument at (2) (scalar and rank-1)
原因:编译器版本太高
解决办法:https://gcc.gnu.org/gcc-10/porting_to.html
添加编译选项 -fallow-argument-mismatch
参考 https://blog.csdn.net/lzzdflg/article/details/106762803