老实说别的库就从来没配置成功过,好不容易配置成功了两个,要写点东西纪念一下。
第一节 Armadillo简介
Armadillo是一个C++的线性代数库,虽然它的官网自我介绍说高效,但是高效这个词要看和什么比了。不过,他的一个特点我很喜欢,那就是类似matlab的语法,而且是故意这样设计的,所以matlab的代码我复制到C++中稍加改动就可以用了。
Armadillo库实际上是包装了其他底层的库和C的cmath函数,默认是使用标准的Blas和Lapack这两个库为基础的,在其压缩包中就有预编译的x64位版本的lib和dll文件。如果需要32位版本的看第二节。反正个人来说不建议自己编译Blas和Lapack这两个库,略看过其源码,C的,C++的,fortran的代码在同一个库里都有,尤其在windows上编译得我快崩溃了,而且最终还失败了。
Armadillo库还支持使用OpenBlas, Intel MKL, AMD ACML这些数学库来提高效率,由于出现了Intel和AMD这些字眼,虽然没做过详细了解,不过估计是依赖于他们自己的CPU的特定加速,移植性可能不太好,最终我选择了OpenBlas。
第二节 前期准备(说人话!“下载”)
无论是在哪个平台上配置,都要下载它们的软件包。需要下载的有Armadillo;如果需要加速则下载OpenBlas;如果在不用OpenBlas的情况下需要32位程序,可以下载32位的Blas和Lapack预编译发行版。下面给出链接后再说明下载的一些注意事项:
Armadillo:
http://arma.sourceforge.net/download.html(直接官网就见到很明显的最新版下载了,Windows/Linux通用)
OpenBlas:
Linux:http://www.openblas.net(官网抬头就有.tar.gz和Zip,选一个下载,到linux里自己编译也是很快的。或者用命令直接装)
Windows:https://sourceforge.net/projects/openblas/files/develop/20150903/(别瞎折腾,直接下载预编译版,如果链接失效看下面怎么找这个链接)
32位的Blas和Lapack预编译发行版:
Windows:http://icl.cs.utk.edu/lapack-for-windows/lapack/(只有Windows需要,Linux都是通过命令安装Blas和Lapack即可)
下面来说一下怎么下载:
先说Armadillo,点进前面说的链接,如图所示,很明显的字眼就是最新版下载,点连接下载就可以了。
再说OpenBlas:
点进去官网,如图所示。其实Windows发行版的链接是可以自己找到的,也如图所示:
Linux的直接下载最新版源代码编译,所以是红色框的图标,下载就行。
Windows上编译很不方便,所以下载预编译版就好了。绿色框里的链接点进去之后是版本选择列表,其中有个develop就是预编译的版本。
develop点进去之后还有一个文件夹,我现在看到的命名是20150903,应该是日期,可能以后看着文章的人看到的就不是了,所以如果以后上面给的链接失效了,那可能是新的预编译版出来了。
最后是32位的Blas和Lapack预编译发行版:
链接点进去之后,首先找到大字标题Prebuilt libraries for Microsoft Visual Studio Projects,然后慢慢往下找,找到一堆链接的地方
第五节 在Windows上使用OpenBlas
在Linux上使用OpenBlas只是在cmake .之前装上OpenBlas即可,如果想自己编译最新版也是一样的三个步骤。现在说一下在Windows上怎么搞。先去上面给的链接下载发行版,进去之后有如下的文件,一般这两个都下载下来,但是我只说x64怎么配置,做法是一样的。
解压出来之后,只有三个文件夹,分别是bin,include, lib。将include的路径在VS中加入项目的C++包含目录,lib加入库目录。
然后在链接器输入中,用libopenblas.dll.a代替默认的blas_win64_MT.lib
这样就可以了。如果想用回Blas,如果之前的包含目录和库目录没有删掉,就直接用回blas_win64_MT.lib即可。
不过在Windows上可能会遇到这些问题:
第六节 使用32位的Blas和Lapack
在上述链接中,下载四个文件,分别是libblas.dll,liblapack.dll,libblas.lib,liblapack.lib。在链接器输入里用libblas.lib,liblapack.lib取代默认的blas_win64_MT.lib和lapack_win64_MT.lib;相应地,运行时改为将libblas.dll,liblapack.dll放到exe运行目录即可。