回 帖 发 新 帖 刷新版面

主题:[原创]Windows下也可以编译lapack的静态连接库了

[b]1、Lapacke3.0的编译[/b]
今天去lapack的国内镜相网站http://netlib.amss.ac.cn/lapack/上,发现提供了WINDOWS版本的lapack及编译配置文件,下载地址
http://netlib.amss.ac.cn/lapack/lapack-pc.zip
http://netlib.amss.ac.cn/lapack/lapack-pc-df.zip
我用了后来一个,还不知道两个有什么区别。
下载后解压,比较解压路径为G:\lapack。需要修改里面的make.inc文件:
1、修改里面的 HOME = G:\lapack   你解压的文件夹
2、如果用CVF编译的话FORTRAN  = df这一个不需要改,如果用IVF编译的话,改为FORTRAN  = ifort
3、修改优化级别OPTS     = -optimize:5,默认为2

在makefile文件里把include <make.inc>这一行头上的叹号注释去掉

然后,点开始菜单里的运行,输入cmd回车后改更路径到G:\lapack,然后输入nmake回车后开始编译,结束后在这个文件夹下就会有三个LIB库文件了。

在DOS提示符下输入nmake blas_testing可对blas进行测试,输入nmake testing可对lapack进行测试,输入nmake timing测试计算时间。

上面是从国内镜像站点下的是3.0版的。

[b]2、Lapacke3.1.1的编译[/b]

再来说一下3.1.1版的,这里要感谢f2003提供的源文件,下载地址:http://jsy.dyn.dhs.org/maths/fortran/netlib/

下载后解压一下,在目录内有一个环境变量配置文件set_environment.bat,需要在DOS提示符下输入
set_environment.bat /? 回车
就会提示输入参数了,如果你需要编译的库文件运行在X86(也就是32位机),fortran编译器是IVF,且需要编译blas库,则在DOS提示符下输入
set_environment.bat X86 Intel
如果是要运行在64位机上,可以用
set_environment.bat X64 Intel

然后去看一下makefile文件里的include make.inc这一行是不是被注释了,如果是,解除注释。在这之后可以在DOS提示符下输入nmake即开始编译库文件,结束后会在当前文件夹下生成三个库文件:blas_WIN32.lib,lapack_WIN32.lib,tmglib_WIN32.lib

如果是要用CVF编译,则需要在执行set_environment.bat X86 Intel之后去修改make.inc里的编译器。
主要修改:将里面两个ifort.exe换成df.exe,然后将优化选项改为OPTS     =  /optimize:5。
[color=FF0000]记住:一定要在执行完set_environment.bat X86 Intel之后再去修改,因为编译时会用到要一些环境变量,这些环境变量需要由set_environment.bat这个批处理文件来生成,而且在执行这个批处理文件时它从install文件夹下CIPY了一个inc文件来覆盖解压目录下的make.inc。[/color]我一开始没注意这个批处理文件,老是生成不成blas库,后来直接到blas目录下去生成blas库后,测试时老提示找不到blas库,需要将这个库COPY到测试目录下才行,很烦。

另外两点建议:
1、建议大家在执行完set_environment.bat X86 Intel后根据自己电脑配置修改make.inc里的优化参数以达到最优性能;
2、建议在编译时先用nmake lib来生成库文件,然后考虑是否进行测试,因为测试可能需要更长的时间。

后来又用CVF编译了一次,发现CVF编译出来库要比IVF编译出来的文件小一点。

回复列表 (共26个回复)

沙发

好好好,很多调用了lapack的源代码都是unix下编的,现在也有希望能移植到win平台。

三个库应该跟linux一样,是blas,lapack和tmglib吧,tmglib是大规模生成矩阵,提供给测试程序用于测试lapack和blas是否正确运算的,我们一般用不上tmglib。

板凳

楼主还可以做一个工作,修改makefile的编译器命令行选项,就可以编制dll动态库。
在linux下就可以这样来生成.so动态库。

3 楼

我晕,刚才去看了netlib,原来lapack 3.1.1也有windows版。只不过我一直对它视而不见。

4 楼

是的,和LINUX下的三个库是一样的,只不过是3.0的。我现在上不了netlib的网站,只能上国内的镜相网站
f2003,你用lapack最多求解过多大线性方程组?速度怎么样?

5 楼

[quote]楼主还可以做一个工作,修改makefile的编译器命令行选项,就可以编制dll动态库。
在linux下就可以这样来生成.so动态库。[/quote]

哈哈,这个工作留着以后做吧,我对DOS提示符下编译也不是很熟悉,一直都是在IDE里做编译工作的。

6 楼

我刚刚把3.1.1版的传到了那个jsy.dyn.dhs.org,

lapack主要用于解方程组和求特征值,我的矩阵不大。

7 楼

[quote]我刚刚把3.1.1版的传到了那个jsy.dyn.dhs.org,

lapack主要用于解方程组和求特征值,我的矩阵不大。[/quote]

你说是3.1.1的WINDOWS版吗?上传这个网站哪个目录下了,找了半天也没找到。在netlib的网站上也没有找到呀。

不知道特大型的稀疏矩阵用lapack能不能求解

8 楼

哈哈,找到了,刚才没仔细看,准确地址是
http://jsy.dyn.dhs.org/maths/fortran/netlib/
谢谢,我来编译一下先

9 楼


按照楼主说的建立了静态库了,我想问的是接下来就直接运行
程序就可以了,不再再做其他的操作了么?

10 楼

[quote]
按照楼主说的建立了静态库了,我想问的是接下来就直接运行
程序就可以了,不再再做其他的操作了么?[/quote]

把生成的库文件放到你程序所在的文件夹或者你的编译器的库搜索的路径下,然后在程序开始加入
!DEC$ OBJCOMMENT LIB:blas_WIN32.lib
!DEC$ OBJCOMMENT LIB:lapack_WIN32.lib
!DEC$ OBJCOMMENT LIB:tmglib_WIN32.lib
即可,库文件名和你生成的一样就行


我来回复

您尚未登录,请登录后再回复。点此登录或注册