1、处理Armadillo
1.1、http://arma.sourceforge.net/download.html#windows下载Armadillo,解压后把其中的include文件夹完整拷贝出来,放到某处,我放在了D:\Armadillo里
1.2、修改D:\Armadillo\include\armadillo_bits\config.hpp,将
#define ARMA_USE_LAPACK
#define ARMA_USE_BLAS
这两句取消注释。表示使用这两个库。
二、处理openBlas
OpenBlas是一个优化的Blas库,基于GotoBlas21.13 BSD版,安装步骤如下:
Windows下安装:
2.1、 在SourgeForge下载最新的OpenBlas库:http://sourceforge.net/projects/openblas/files/
2.2、 解压下载的源码到工作目录,比如:E:\VMwareSharedFolder\OpenBLAS
2.3、 根据OpenBlas在GitHub上的说明“Howto use OpenBLAS in Microsoft Visual Studio”,下载MinGW,启动mysys shell,检查gcc的版本,如果低于4.7,那么进行升级,否则直接编译即可,命令如下:
gcc –v ::查看gcc的版本号
mingw-get removegcc ::卸载gcc(最好先卸载,再重新安装,否则直接跟新会有部件漏掉跟新)
mingw-get updategcc ::更新gcc
mingw-getupgrade gcc ::升级gcc
2.4、确保gcc版本高于4.7后,在Mysys shell中进入OpenBlas目录,输入make即可开始编译,OpenBlas会自动检测编译器和CPU:
2.5、 编译完成后,在OpenBlas目录下,会出现libopenblas.a和libopenblas.dll两个文件,安装一下命令将编译好的OpenBlas库安装到系统中去:
2.6、 安装完毕后,在C:\warmerda\OpenBLAS目录下会出现include和lib和bin三个目录,include中包含库的头文件,lib目录里是libopenblas.a和libopenblas.dll.a两个文件,其中libopenblas.a是MinGW的lib库文件,bin文件中存放libopenblas.dll文件,libopenblas.dll是Windows的动态库文件,目前我们只有动态库,没有lib文件,因此需要进一步处理,生成windows的lib文件才可以使用。下一篇文件中,我将会讲解如何从一个dll文件生成lib文件,见 由动态库文件dll生成lib库文件。
下面来说明如何从一个dll文件生成lib库文件。
参考OpenBlas的说明“Howto generate import library for MingW”,和MinGW的说明HOWTO Create an ImportLibrary for a DLL using MinGW,学习如何生成lib库,其中OpenBlas的说明讲的是如何使用Visual studio的lib.exe工具从dll生成lib文件,而MinGW讲的是如何把一个windows的dll转变成MinGW可以使用的.a型的lib库。使用Visual studio的工具,从dll生成lib文件的具体步骤如下:
2.7、 编写bat批处理文件nmake.bat,做如下设置:
2.9、 使用dumpbin导出函数列表到某个文件中:
2.10、生成的t.txt中包含了dll文件的导出函数信息,如下:
2.12、在最前面一列加入@(选择第一列,然后输入@即可);
2.13、 将name列移动到@前面;
2.14、删除hint和RVA两列;
2.15、在文件的前面添加两行,最后改造成下面这样:(我尝试了该libopenblas.def文件,但是报错不能识别@符号,所以我用下面的方法,调用mingw来生成libopenblas.def文件)
我是用下面的方法生成libopenblas.def文件的
至于MinGW的帮助HOWTO Create an ImportLibrary for a DLL using MinGW讲的是我们在拥有dll文件的时候,如何生成MinGW可以使用的后缀为.a的lib库的步骤,这里假定我们至于libopenblas.dll,没有libopenblas.a,我们要生成libopenblas.a基本步骤如下:
2.18、在mysys shell里,切换到dll文件所在目录;
2.19、新建文本文件,命令为libopenblas.def,在其前面添加以下两行:
2.21、等定义完def文件后,使用下面的命令生成.a文件:
这个说明中的第3步完全是基于MinGW的视角来看的,在Windows下,我们可以使用Visual studio的bumpbin来完成这个步骤,也就是前面讲的如何生成def文件的步骤。
另外Mingw实际上提供了一个工具用于完成这个事情,只是在HOWTO Create an ImportLibrary for a DLL using MinGW一文中他们自己都没有说清楚,对于libopenblass.dll,在MinGW下使用下面的命令生成def文件:
三、最后处理
3.1、将编译好的libopenblas.lib库文件添加到编译器的linker-> input-> additional dependencies中
3.2、在编译器的include目录中添加include文件夹的路径以及3.1中库文件所在位置。如图:
四、测试
运行结果:
A =
0.0125 5.8501 8.2284 7.1050 0.9140
5.6359 4.7987 7.4660 5.1353 3.6445
1.9330 3.5029 1.7411 3.0399 1.4731
8.0874 8.9596 8.5894 0.1498 1.6590
B =
9.8853 0.0891 6.0176 4.5079 7.8332
4.4569 3.7788 6.0717 3.5212 8.0261
1.1908 5.3166 1.6623 0.5704 5.1988
0.0467 5.7118 6.6305 6.0768 3.0195
A .* B =
0.1237 0.5213 49.5155 32.0286 7.1598
25.1186 18.1335 45.3313 18.0827 29.2511
2.3019 18.6237 2.8943 1.7340 7.6585
0.3776 51.1760 56.9518 0.9106 5.0093
请按任意键继续. . .