windows下Armadillo+openBlas

article/2025/8/20 22:08:48

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库安装到系统中去:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. make PREFIX=/c/warmerda/OpenBLAS install  

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,做如下设置:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. set path=%path%;"C:\Program Files\Microsoft Visual Studio 8\VC\bin"  
  2. cmd.exe /kvcvars32.bat  
2.8、启动nmake.bat,进入OpenBals库的安装目录:


2.9、 使用dumpbin导出函数列表到某个文件中:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. dumpbin -exports libopenblas.dll>t.txt  

2.10、生成的t.txt中包含了dll文件的导出函数信息,如下:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Microsoft(R) COFF Binary File Dumper Version 6.00.8447  
  2. Copyright(C) Microsoft Corp 1992-1998. All rights reserved.  
  3.    
  4.    
  5. Dump of file libopenblas.dll  
  6.    
  7. File Type: DLL  
  8.    
  9.   Section contains thefollowing exports for libopenblas.dll  
  10.    
  11.            0 characteristics  
  12.     53A0ED46 time date stamp Wed Jun 1809:37:10 2014  
  13.         0.00 version  
  14.            1 ordinal base  
  15.         7417 number of functions  
  16.         7417 number of names  
  17.    
  18.     ordinal hint RVA      name  
  19.    
  20.           3   0 000012C0 CAXPY  
  21.        3084   1 00248C30 CBBCSD  
  22.        2070   2 00158A30 CBDSQR  
  23. …  
  24.        5017 1CF7 004303C0 zupmtr  
  25.        5018 1CF8 004303C0 zupmtr_  
  26.    
  27.   Summary  
  28.    
  29.         1000 .CRT  
  30.       10E000 .bss  
  31.         2000 .data  
  32.        25000 .edata  
  33.        7D000 .eh_fram  
  34.         1000 .idata  
  35.        37000 .rdata  
  36.        21000 .reloc  
  37.       80D000 .text  
  38.         1000 .tls  

2.11、将t.txt中“ordinal hintRVA      name”一行之前以及下面“Summary”之后的内容全部删除,然后使用UtriEdit等带有列编辑功能的文本编辑器打开t.txt,切换到列模式:


2.12、在最前面一列加入@(选择第一列,然后输入@即可);

2.13、 将name列移动到@前面;

2.14、删除hint和RVA两列;

2.15、在文件的前面添加两行,最后改造成下面这样:(我尝试了该libopenblas.def文件,但是报错不能识别@符号,所以我用下面的方法,调用mingw来生成libopenblas.def文件

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. LIBRARY libopenblas.dll  
  2. EXPORTS  
  3.   
  4.  CAXPY                               @         3  
  5.  CBBCSD                              @      3084  
  6.  CBDSQR                              @      2070  
  7.  CCOPY                               @         6  
  8.  CDOTC                               @         9  
  9.  …  
  10.  …  
  11.  zupgtr                              @      5014  
  12.  zupgtr_                             @      5015  
  13.  zupmtr                              @      5017  
  14.  zupmtr_                             @      5018  
2.16、将上面改造完成后的文件重命名为libopenblas.def,然后使用lib命令,生成lib文件,如下:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. lib /machine:i386 /def:libopenblas.def  
    对于64位的机器,使用:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. lib /machine:X64 /def:libopenblas.def  
2.17、 至此,我们需要的lib库文件生成了,我们只需要在Visualstudio的包含目录里添加OpenBlas的include目录,在lib目录里包含lib库的目录,并且把libopenblas.lib加入到附加依赖项里就可以使用OpenBlas库了。

我是用下面的方法生成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,在其前面添加以下两行:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. LIBRARY libopenblas.dll  
  2. EXPORTS  
2.20、根据编译器的连接错误提示,依次将无法连接的函数名加入到这个def文件中,一行一个;

2.21、等定义完def文件后,使用下面的命令生成.a文件:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. libtool –d libopenblas.def –l libopenblas.a  

命令执行完毕后,生成的libopenblas.a文件就是MinGW的lib库文件。

这个说明中的第3步完全是基于MinGW的视角来看的,在Windows下,我们可以使用Visual studio的bumpbin来完成这个步骤,也就是前面讲的如何生成def文件的步骤。

另外Mingw实际上提供了一个工具用于完成这个事情,只是在HOWTO Create an ImportLibrary for a DLL using MinGW一文中他们自己都没有说清楚,对于libopenblass.dll,在MinGW下使用下面的命令生成def文件:

[plain] view plaincopy
  1. pexports libopenblas.dll > libopenblas.def  
如果Mingw提示没有pexports命令,我们只需要使用Mingw-get安装一下即可:

[plain] view plaincopy
  1. mingw-get install pexports  


三、最后处理

3.1、将编译好的libopenblas.lib库文件添加到编译器的linker-> input-> additional dependencies中

1


3.2、在编译器的include目录中添加include文件夹的路径以及3.1中库文件所在位置。如图:

2


四、测试

[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <armadillo>  
  3.   
  4. int main()  
  5. {  
  6.     arma::mat A = arma::randu<arma::mat>(4, 5) * 10;  
  7.     arma::mat B = arma::randu<arma::mat>(4, 5) * 10;  
  8.     arma::mat C = A % B;  
  9.     A.print("A = \n");  
  10.     B.print("B = \n");  
  11.     C.print("A .* B = \n");  
  12.     return 0;  
  13. }  

运行结果:

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
请按任意键继续. . .





http://chatgpt.dhexx.cn/article/1dGExvGj.shtml

相关文章

C++线性代数库armadillo

armadillo是为C设计的线性代数函数库&#xff0c;语法和函数类似MATLAB&#xff0c; 介绍主页 http://arma.sourceforge.net/ 与MATLAB语法对照如下http://arma.sourceforge.net/docs.html#syntax 功能概览 &#xff08;1&#xff09;matrix, vector, cube and field class…

Armadillo使用介绍(九):下载Armadillo、配置工程、运行第一个程序

一、下载Armadillo 通过以下两种途径下载Armadillo C库源码&#xff1a; Armadillo Download page 如下图所示&#xff0c;可以下载到最新版本的armadillo库&#xff08;随着时间变化&#xff0c;armadillo版本可能会比图示的版本更高&#xff09;。 点击上图红框中的链接后…

C++调用Armadillo计算库

1. 下载压缩包&#xff0c;解压到目录&#xff0c;比如D:\ALGLIB\armadillo&#xff0c;只保留include文件夹和examples里的lib_win32文件夹即可&#xff1b; 下载地址&#xff1a;Armadillo: C library for linear algebra & scientific computinghttp://arma.sourceforge…

armadillo 使用杂记

2022.10.06 验证矩阵首地址与首元素首地址的关系 验证矩阵中元素的存储方式 做以下实验 mat m;//输出矩阵头位置cout<<&m<<endl;m<<4<<6<<3<<endr<<1<<3<<1<<endr<<3<<5<<1<<endr;/…

Ubuntu21.10下安装使用Armadillo库

文章目录 一、前言二、下载安装文件三、编译与安装四、代码示例五、总结 一、前言 Armdillo 矩阵运算速度跟 MATLAB 一个量级&#xff0c;为目前使用比较广的 C 矩阵运算库之一&#xff0c;是在 C 下使用 MATLAB 方式操作矩阵很好的选择&#xff0c;许多 MATLAB 的矩阵操作函数…

Armadillo 线性代数库中的聚类算法避坑

1、本文的由来 最近由于需要在C语言编写的项目中使用高斯混合模型聚类算法&#xff0c;最开始是打算自己写一个的&#xff08;参考的是《机器学习》&#xff0c;周志华著这本书&#xff09;&#xff0c;但是最后发现自己写的算法运行效率低&#xff0c;而且对于维度比较高的样本…

C++线代运算库Armadillo配置(Qt CLion VSCode)

目录 1. 前言 2. Armadillo下载 方法1&#xff1a;官网下载 方法2&#xff1a;安装包下载 3. Qt 中 Armadillo 配置 4. CLion 中 Armadillo 配置 5. VSCode 中 Armadillo 配置 1. 前言 工作和学习上一直用着 Armadillo 库中的矩阵运算&#xff0c;极大的提升了 Matlab 代…

Clion 使用 armadillo 配置方法

Clion 使用 armadillo 配置方法 jetbrains 全家桶是我的最爱 但是C的编写网上都是visual studio 的教程&#xff0c;尤其是对于库文件的引用&#xff0c;Clion很少有指导&#xff0c;最近需要将python的程序转为C&#xff0c;用到了armadillo 矩阵库&#xff0c; 但是网上对于…

Armadillo C++ Library

Armadillo 简介 Armadillo C Library是一种C的线性代数库&#xff08;矩阵数学&#xff09;&#xff0c;具有良好的平衡速度与易用性。其底层可以调用不同的BLAS和LAPACK库来提高效率&#xff0c;同时利用模板编程提高了代码的操作性 官网下载链接&#xff1a;点这里下载 Vi…

C++中armadillo矩阵库使用说明

在http://blog.csdn.net/piaoxuezhong/article/details/58055709博文中介绍了eigen矩阵库的使用&#xff0c;这里介绍另一种矩阵库&#xff1a;armadillo~ Armadillo&#xff1a;C下的Matlab替代品 armadillo是目前使用比较广的C矩阵运算库之一&#xff0c;许多Matlab的矩阵操…

armadillo库安装教程

目录 armadillo库功能介绍 armadillo库安装 vs中添加步骤 测试 armadillo库功能介绍 在c编程中&#xff0c;我们在进行一些算法运算经常会面对矩阵计算&#xff0c;c的标准库中是没有关于矩阵运算的库的&#xff0c;在面对矩阵计算我们只能自己编写相关代码进行计算&#xf…

armadillo使用,armadillo提高编译效率和速度

Armadillo是一个全面的、基于模板的 C 线性代数库&#xff0c;设计有 LAPACK 和 ATLAS 库的替代接口。 armadillo使用工具旨在提供速度和易用性&#xff0c;以及类似于 Matlab 的熟悉语法(或 API)。 armadillo使用允许您编写可以集成到组件或应用程序中的各种类型的数学函数。它…

C++ Armadillo矩阵库的安装与基本用法

文章目录 Armadillo安装入门案例直接赋值切片常用函数 Armadillo 安装 Armadillo是一个具有Matlab风格的线性代数包。下载之后解压到任意文件夹&#xff0c;然后对VS工程进行设置。 菜单栏生成->配置管理器&#xff0c;将平台改为x64右键项目名称->属性(快捷键ShiftF4…

一个常见的大数据平台架构

这是一个典型的大数据架构&#xff0c;且对架构进行了「分层」&#xff0c;分为「数据源层」、「数据传输层」、「数据存储层」、「编程模型层」和「数据分析层」&#xff0c;如果继续往上走的话&#xff0c;还有「数据可视化层」和「数据应用层」。

大数据平台架构实践

说明 本篇博客整理自参考内容&#xff0c;完整内容请查看原文章&#xff1b; 技术选型 MOLAP 与Druid相类似的实时数据分析工具&#xff0c;还有Linkedln的Pinot和eBay的Kylin&#xff0c;它们都是基于Java开发的。Druid相对比较轻量级&#xff0c;用的人也多&#xff0c;毕…

网易大数据平台架构实践分享!

随着网易云音乐、新闻、考拉、严选等互联网业务的快速发展&#xff0c;网易开始加速大数据平台建设&#xff0c;以提高数据获取速度&#xff0c;提升数据分析效率&#xff0c;更快发挥数据价值。 本次演讲主要分享网易如何围绕和改造开源技术&#xff0c;以产品化思维打造网易自…

详解大数据平台架构

目录: 什么是大数据 Hadoop介绍-HDFS、MR、Hbase 大数据平台应用举例-腾讯 公司的大数据平台架构 “就像望远镜让我们能够感受宇宙,显微镜让我们能够观测微生物一样,大数据正在改变我们的生活以及理解世界的方式……”。 大数据的4V特征 公司的“大数据” 随着公司业…

京东金融大数据平台架构(附82页PPT)

公众号推文规则变了&#xff0c;点击上方 "数据社", 设为星标 后台回复【加群】&#xff0c;申请加入数据学习交流群 大家好&#xff0c;我是一哥&#xff0c;给大家分享一下京东金融大数据分析平台总体架构介绍&#xff0c;废话不说&#xff0c;干货收藏吧&#xff…

大数据平台架构设计探究

本文首发于 vivo互联网技术 微信公众号 链接&#xff1a;https://mp.weixin.qq.com/s/npRRRDqNUHNjbybliFxOxA 作者&#xff1a;刘延江 近年来&#xff0c;随着IT技术与大数据、机器学习、算法方向的不断发展&#xff0c;越来越多的企业都意识到了数据存在的价值&#xff0c;将…

乡村振兴大数据平台架构方案(附下载)

迎加入星球下载所有资料&#xff0c;转发朋友圈截图回复666亦可下载 加入星球&#xff0c;好资料一直有 推荐阅读&#xff1a; 世界的真实格局分析&#xff0c;地球人类社会底层运行原理 不是你需要中台&#xff0c;而是一名合格的架构师&#xff08;附各大厂中台建设PPT&#…