编译生成ARPACK x64位
试了几乎网上所有的资料,最后试出来如何生成ARPACK x64
用到的工具
MSYS2 下载地址
MinGW64位 下载地址
ARPACK 下载地址
1 MinGW安装流程
打开下载的exe(网上很多安装的MinGW流程没有说是什么版本,大多按完是win32的)点Next
有时候会发生
这样的报错,这时候切换网络,一般实验室网络问题,可以尝试用手机流量下载。
然后按如下进行选择
第一个版本应该最高也没啥问题。详细的解释看
知乎-MinGW-w64安装教程
接下来安装就可以(大概500m)
安装完成后所在的文件
2 Msys2安装流程
理论上Msys2可以直接安装MinGw,我事先下好了MinGw所以没有按
安装流程查看
windows搭建gcc开发环境(msys2)
Msys2直接点击链接给的exe就可傻瓜式安装,安装后需要配以下环境
我当前下载的路径为
修改pacman源
分别在这两个路径下更改(因为只安装x64的所以32的就不管)
- \etc\pacman.d\mirrorlist.mingw64
- \etc\pacman.d\mirrorlist.msys
用清华大学的镜像源中更改上述两个文件
清华大学msys2
接下来打开MSYS2 64-bit,执行pacman -Sy
然后安装msys/make
如果没有make那么输入make将会出现报错
可以使用make -v来查看是否安装成功
将之前下载的MinGW文件放入
将mingw64整个文件夹复制,放入将会补充mingw64的内容。
在环境变量里添加路径
D:\msys64\mingw64\bin
D:\msys64\mingw64\opt\bin
现在gcc应该可以使用,输入查看
gcc -v
3 编译ARPACKx64
首先下载两个arpack压缩文件arpack96.tar.z和patch.tar.Z
将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 =/d/Environment/ARPACK (改成自己ARPACK的目录)
PLAT = x64
FC= gfortran
FFLAGS= -O
打开
cd 到自己的ARPACK目录
cd /d/Environment/ARPACK
生成.a文件
make lib
会生成一个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库文件
生成lib文件
本人使用vs2017,win10
直接搜索
vs2015搜x64的,打开后输入ARPACK的目录
cd D:\Environment\ARPACK
然后输入
lib /machine:X64 /def:arpack_x64.def
即可编译出lib文件
一个意外的错误,在生成.a文件和.o文件事因为编译不正确而后继续进行后面的步骤,可能会出现
这样一系列的错误,主要是因为之前使用x32生成的没有删除,而后再运行生成.a和.o文件时因为文件存在就不会覆盖,解决方法时删除所有产生的.o文件。