18 安装zlib报错_scalapack win安装及mingw64环境配置
失学在家,手里也没有服务器。看家里有台台式机,于是想给台式机配上科研环境。发现win10配置scalapack的资料基本没有,于是就想写点笔记,为人类的中文文献库增加一点资料。
1. MSYS2和MINGW64安装
从https://www.msys2.org/下载msys2。
打开msys2.exe 环境和ubuntu非常像。
1.1 配置镜像源
pacman 的配置
编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
然后执行 pacman -Sy 刷新软件包数据即可。
如果发现清华源已经有了,但是排在前面的第一个源是http://repo.msys2.org/mingw/x86_64/。把清华源或者其他国内源(比如肥科的)移到最前面。因为默认是使用第一个源。
安装mingw64
pacman -Syuu
更新。
pacman -S base-devel git mingw-w64-x86_64-toolchain
安装mingw64
pacman -S base-devel git mingw-w64-i686-toolchain
是用来安装mingw32的。
打开mingw64.exe
输入gcc -v
查看gcc的版本信息。
得到
$ gcc -v
Using built-in specs.
COLLECT_GCC=D:softwaremsys64mingw64bingcc.exe
COLLECT_LTO_WRAPPER=D:/software/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.3.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-9.3.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64 --with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++ --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --enable-plugin --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev2, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
Thread model: posix
gcc version 9.3.0 (Rev2, Built by MSYS2 project)
说明gcc安装好了。
2. openmp和msmpi 安装
装好了gcc也就有了openmp,具体测试请参考(https://www.math.ucla.edu/~wotaoyin/windows_coding.html)
mpich在win已经不更新了。所以最好选官方版本msmpi
下载最新的MS MPI(https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi) msmpisdk.msi 和 MSMpiSetup.exe都要安装好。
在cmd输入set MSMPI
MSMPI_BENCHMARKS=C:Program FilesMicrosoft MPIBenchmarks
MSMPI_BIN=C:Program FilesMicrosoft MPIBin
MSMPI_INC=C:Program Files (x86)Microsoft SDKsMPIInclude
MSMPI_LIB32=C:Program Files (x86)Microsoft SDKsMPILibx86
MSMPI_LIB64=C:Program Files (x86)Microsoft SDKsMPILibx64
出现表示安装正确。下面将MS MPI和mingw64适配一下。
$mkdir ~/msmpi # create a temporary folder under your home directory
$cd ~/msmpi # enter the folder
$cp "$MSMPI_LIB64/msmpi.lib" . # copy msmpi.lib to ~/msmpi/; the import library, which is a placeholder for dll
$cp "$WINDIR/system32/msmpi.dll" . # copy msmpi.dll to ~/msmpi/; the runtime library
$gendef msmpi.dll # generate msmpi.def. For 32-bit, use: gendef -a msmpi.dll, which specifies the stdcall format
$dlltool -d msmpi.def -D msmpi.dll -l libmsmpi.a # generate the (static) library file libmsmpi.a
$cp "$MSMPI_INC/mpi.h" .
我们需要的就是libmsmpi.a和mpi.h 然后把它们放进gcc的默认库文件夹和默认头文件夹(其实就是懒)
在这里,
cp libmsmpi.a /mingw64/lib
cp mpi.h /mingw64/include
注意如果不用msys2,直接安装的mingw64(比如下载codeblock顺便安装一个mingw64)。默认的的库文件夹和头文件夹应该是x86_64-w64-mingw32/lib,x86_64-w64-mingw32/include。当然也有可能是其他的。(否则需要-L"库文件" -I"头文件")
测试一下
$gcc mpi_hello_world.c -lmsmpi -o mpi_hello #编译
$mpiexec -n 6 mpi_hello #运行
就可以了。
3. openblas,lapack,gsl 安装
pacman -S mingw-w64-x86_64-openblas # use "pacman -S mingw-w64-i686-openblas" for 32-bit
安装openblas,这样openblas自动装到默认文件夹。不过,使用头文件的时候需要#include<OpenBLAS/头文件>
编译的时候记得加上 -lopenblas
其他的blas请参考参考文献1
接下来是lapack
$pacman -S mingw-w64-x86_64-cmake # install CMake
$git clone https://github.com/msys2/MINGW-packages.git # clone the scripts
$cd MINGW-packages/mingw-w64-lapack # locate the LAPACK script
$makepkg-mingw # build BLAS and LAPACK
好,这里很奇怪。我在装lapack-3.9.0的时候不停的编译报错。(欢迎交流)
所以我装了lapack-3.8.0
需要改PKGBUILD文件。
改了pkgver为3.8.0等它下好lapack-3.8.0.tar.gz之后,通不过文件校验。所以要把sha256sum一起改了。参考文献[4]得到校验码。其他方法也ok啦。
然后安装
$ pacman -U mingw-w64-x86_64-lapack*.pkg.tar.xz # install BLAS and LAPACK
编译的话:g++ lapack_test.cpp -llapack -o lapack_test
gsl 我基本当特殊函数库用的,所以还是很重要。(其实如果计算量很大,按道理特殊函数值计算这里最好做成异构的,比如扔给GPU)
$ cd ~
$ wget -qO- http://gnu.mirrors.pair.com/gsl/gsl-latest.tar.gz | tar xvz # this creates the folder ~/gsl-2.4/
$ cd gsl-2.4
$ ./configure --prefix=/mingw64 # I am unsure about the necessity of --prefix=/mingw64, but it should not hurt
$ make # this will take 15 minutes or so to complete
$ make install # install header and library files to the system, you can use "make uninstall" to do the opposite
安装。
编译的话 gcc $(gsl-config --cflags) gsl_test.c $(gsl-config --libs) -o gsl_test
文献1还有其他的库,可以去看看。好了,本文的文献1引用就到此为止了。
scalapack安装
netlib上下载scalapack的源文件。http://performance.netlib.org/scalapack/#_release_notes
重点我们需要改里面的SLmake.inc.example文件。
编译选项。用gfortran替代mpif90,gcc替代mpicc。另外加了-lmsmpi (其实按道理不加应该也可以,我没试过。)
一般来说这样的替代在x86上是可以的,除非各种自造的编译器就不一定了。
然后RANLIB改成echo,如果装了ranlib就不用改了。
RANLIB = echo
最后
BLASLIB = /mingw64/lib/libopenblas.a
LAPACKLIB = /mingw64/lib/libopenblas.a
LIBS = $(LAPACKLIB) $(BLASLIB)
这里我也有点奇怪,为什么LAPACKLIB要改成libopenblas.a ,这里是我从youtube ubuntu上安装scalapack看到的。
最后把SLmake.inc.example文件重命名为SLmake.inc
在scalapack文件夹下打开mingw64,输入
$make clean
$make lib
开始编译。最终从scalapack文件夹下得到libscalapack.a。把它复制到默认的库文件夹。在这里是/mingw64/lib
测试
最后从找了个例子scalapack矩阵对角化(pdsyevd),来自文献[5] scalapack矩阵对角化(pdsyevd) http://www.voidcn.com/article/p-eejnmusv-bvt.html
程序编译tests.c
$ gcc tests.c -o tests -lmsmpi -lscalapack -lopenblas -lgfortran
会报错,比如
D:/software/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/software/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.3.0/../../../../lib/libscalapack.a(dgebs2d_.o):dgebs2d_.c:(.text+0x156): undefined reference to `MPI_Type_free'
这是因为libscalapack.a依赖libmsmpi.a,所以libscalapack.a必须放前面。
正确的编译命令
$ gcc tests.c -o tests -lscalapack -lopenblas -lgfortran -lmsmpi
运行得到
这样scalapack就安装成功了。
注意这里是纯C的环境。如果代码是C++的,函数调用前的声明要记得加extern "C" 比如extern void dgesv_( )
要改成extern "C" void dgesv_( )
纯C环境后者会报错。
其实scalapack最好还是linux下用。不过这样的文章太多了,也就没必要写了。
双系统太麻烦了。WSL2不能使用全部的内存而且使用GPU不方便。远程也不让啊。
好,我相信有人一定会想win10下测试用Intel的MKL最方便。没错我也是这么想的,但是要交成果的时候要用非MKL的scalapack。
然后这时候就会发现这两个库的各种函数命名是不一样的。这时候代码已经写了几万行了,我现在还没改完。。。
附件:
https://github.com/chenlin0/Learning/tree/master/MPI/scalapack
SLmake.inc :scalapack的编译配置
libscalapack.a :scalapack 2.0的win库文件
tests.c :测试文件
参考文献
[1] MinGW coding under Windows (C, C++, OpenMP, MPI) https://www.math.ucla.edu/~wotaoyin/windows_coding.html
[2] "undefined reference to" 问题解决方法 https://blog.csdn.net/aiwoziji13/article/details/7330333
[3] Msys2 | 镜像站使用帮助| 清华大学开源软件镜像站https://mirror.tuna.tsinghua.edu.cn/help/msys2/
[4] Ubuntu中sha256sum命令使用 https://blog.csdn.net/jq_ak47/article/details/53590563
[5] scalapack矩阵对角化(pdsyevd) http://www.voidcn.com/article/p-eejnmusv-bvt.html
[6] ScaLAPACK for Windows http://icl.cs.utk.edu/lapack-for-windows/scalapack/index.html
18 安装zlib报错_scalapack win安装及mingw64环境配置相关推荐
- 三张解决方法--安装VMware报错:无法安装服务vmware Authorization server请确保你有足够的权限
安装VMware报错:无法安装服务vmware Authorization server请确保你有足够的权限 解决一: 出现"无法安装服务vmware Authorization serve ...
- 安装VMware报错:无法安装服务vmware Authorization server请确保你有足够的权限
安装VMware报错:无法安装服务vmware Authorization server请确保你有足够的权限 情况一: 出现"无法安装服务vmware Authorization serve ...
- Python3.6安装suds报错,需要安装suds-jurko
python3.6.5安装suds报错 C:\Users\Administrator>pip install suds Collecting sudsDownloading https://fi ...
- rpm安装mysql报错NOKEY_rpm包安装报错: Header V3 RSASHA256 Signature, key ID fd431d51 NOKEY
报错信息:Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY 一.问题场景 RHEL 6.5 安装MySQL-5.5.44 首先,卸载rpm ...
- python安装robotframework报错_robotframework-autoitlibrary离线安装
由于AutoItLibrary需要依赖pywin32库.所以要使用AutoItLibrary必须要先安装好pywin32 今天需要在win7 64位系统下安装autoitlibrary库,起初安装好了 ...
- python3.4 安装numpy报错_python2.7安装numpy报错:is not a supported wheel on...
python2.7安装numpy时报错信息如下: C:\Python27\Scripts>pip install "numpy-1.9.2+mkl-cp26-none-win_amd6 ...
- linux下安装python3报错_Linux中安装python3
(一)Linux中安装python3(含pip3自动安装) 1.首先安装依赖包 yum -y groupinstall "Development tools" yum -y ins ...
- linux离线安装g 报错,Linux离线安装mysql 5.6详细步骤
tar -zxvf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz 8.将解压好的文件夹重命名为mysql mv mysql-5.6.40-linux-glibc ...
- linux编译安装的报错,linux编译安装时常见错误解决办法
This article is post on https://coderwall.com/p/ggmpfa 原文链接:http://www.bkjia.com/PHPjc/1008013.html ...
最新文章
- ubuntu 10.10 安装 oracle 11G
- 依赖注入容器Autofac的详解[转]
- Linux设备驱动中的并发控制总结
- 被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?
- R语言 神经网络与深度学习(二)
- 如何批量将 Word 文档转为 Svg 格式
- Redis Lua脚本好处、Redis执行Lua的两种方式、Redis缓存Lua脚本、Redis Lua原子性验证、Lua脚本IP限流、Lua脚本自乘
- JAVA SSO单点登录原理以及实现方案
- linux 命令 tar 打包压缩命令 date时间 命令实践
- facebook登录和分享
- 机器学习这10年我们能在各自的领域做点什么?
- 罗技craft写java怎么样_评测| 入手罗技CRAFT无线键盘后才知道什么叫奢华
- 程序包解析错误解决办法
- 解决jmeter控制台报javax.swing.text.BadLocationException: Position not represented by view的方法
- 下载谷歌浏览器以及谷歌浏览器不能加载网页问题的解决
- css背景图片高斯模糊_如何将网页CSS背景图高斯模糊且全屏显示
- SVN代码增量打包工具
- 如何再UOS/Ubuntu中创使用ufw设置防火墙
- 使用Idead的时候遇到<dependency>标红等问题
- (转)云计算的三种模式:IaaS、PaaS和SaaS 通俗理解
热门文章
- 写代码时发现......还是SpringBoot牛逼!
- Facebook的技术布局,有哪些值得学习的秘密
- Java开发技巧详细知识体系总结(2021版)
- 商汤发布L4级接驳小巴和智能路侧感知解决方案,加速V2X产业创新
- 23 岁创业,28 岁成为福布斯亚洲青年领袖,这个“刷脸的男人”有点牛
- 萌新程序员找工作该怎么写简历?
- 字节跳动武汉招聘 2000 人,距离大厂 Offer,你还差这篇 Java 干货!| 原力计划...
- 2020 年,你必须知道发展最快和衰落最快的软件技能
- 出于安全考虑,千万不要绕开 CORS!
- 高并发下如何缩短响应时间?