回 帖 发 新 帖 刷新版面

主题:[原创]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个回复)

21 楼

[quote]很好的帖子
想问一下如果用Microsoft Fortran Powerstaion来编译,如何修改make.inc文件 谢谢[/quote]

问题解决了,应该修改如下:
2 FORTRAN =FL32

22 楼

楼主,我按照你的方法试过了,好像不行啊,每次都会出现如下错误,请问如何解决,谢谢!
second.f
second.f(16) : Error: Error in opening the Library module file.   [DFPORT]
      USE DFPORT
----------^
NMAKE : fatal error U1077: 'df' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio\VC98\BIN\N
MAKE.EXE"' : return code '0x2'
Stop.

23 楼

[quote]楼主,我按照你的方法试过了,好像不行啊,每次都会出现如下错误,请问如何解决,谢谢!
second.f
second.f(16) : Error: Error in opening the Library module file.   [DFPORT]
      USE DFPORT
----------^
NMAKE : fatal error U1077: 'df' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio\VC98\BIN\N
MAKE.EXE"' : return code '0x2'
Stop.
[/quote]
请问你用的是什么版本的FORTRAN?DFPORT是digital fortran的一个模块,df是CVF在DOS环境下的编译命令,要确保你的系统里FORTRAN编译器安装是正确的才行。

24 楼

我按照文中方法建立了静态库。但是链接文件的时候出现下面问题。我用的是CVF 6.6  该怎么办?(程序中用了dgesv函数)

-------------------Configuration: TEST LAPACK - Win32 Debug--------------------
Linking...
TEXT LAPACK_1.OBJ : error LNK2001: unresolved external symbol _DGESV@32
Debug/TEST LAPACK.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

TEST LAPACK.exe - 2 error(s), 0 warning(s)

25 楼

我也遇到同样问题,我查了一下在IVF下似乎应该将 USE DFPORT改为 USE LIBIFPORT,可是在cmd环境下怎么能让编译器知道到哪里找到这个库文件啊? 我对fortran实在不熟悉。 谢谢。 

26 楼

[quote]我也遇到同样问题,我查了一下在IVF下似乎应该将 USE DFPORT改为 USE LIBIFPORT,可是在cmd环境下怎么能让编译器知道到哪里找到这个库文件啊? 我对fortran实在不熟悉。 谢谢。 
[/quote]

我的问题解决了, 我用的是IVF, 应该从windows的“开始”进入“Intel(R) Visual Fortran Comiler for applications running on IA-32, Version 10.1.014 build environmet", 这样会自动设置编译环境,然后进入Lapack运行Nmake就可以了。 源文件不要做任何改动。

我来回复

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