Eigen是著名的C++矩阵运算库,提供了许多矩阵运算的接口,主要包括两大部分,一部分是稠密矩阵,另一部分是稀疏矩阵。Eigen以源码形式提供给大家,用的时候,只要将源码包含在项目的包含路径上,具体安装和使用方法,可以参考如下链接:

《C++矩阵处理工具——Eigen》,《Eigen初步1:初步体验Eigen库》。

这次我们重点讲解一下如何安装suitesparse库。

SuiteSparse是世界上最优秀的稀疏矩阵处理工程之一。SuiteSparse是一组C、Fortran和MATLAB函数集,用来生成空间稀疏矩阵数据。在SuiteSparse中几何多种稀疏矩阵的处理方法,包括矩阵的LU分解,QR分解,Cholesky分解,提供了解非线性方程组、实现最小二乘法等多种函数代码。

SuitSparse包含了众多的依赖库,例如:blas库、lapack库、cholmod库等,所以安装很复杂。不过值得庆幸的是,国外早有大牛已经实现了在windows,linux或者mac等所平台上的cmake脚本,具体参考Github项目<<suitesparse-metis-for-windows>>

打开Github,会发现作者已经写了详细的安装流程,不过经过我亲测,还是有很多的陷阱。所以我将一步步地将所有的步骤给大家讲清楚,希望大家也能将自己学习历程中一些重要的知识分享出来,共建我们的开源社区。

先说一下我的配置:

Windows 7 SP1, Visual studio 2008, cmake  2.8.

下面正式开始:

1. 安装Cmake

2.  下载或克隆Gthub上最新的项目版本,本版本为v1.3.0,然后解压到某个本地文件下,我们暂称这个路径为SP_ROOT,我这里是F:\suitsparse\suitesparse-metis-vs2008

我的如图所示:

这里注意:我们看到Gtihub上建议我们分别下载 SuiteSparse-X.Y.Z.tar.gz和 metis-X.Y.Z.tar.gz.(建议metis版本在5以下,比如metis-4.0.3,或者不要覆盖它),然后覆盖它原来所含的源代码。这里我觉得有点矛盾,因为我们打开https://github.com/jlblancoc/suitesparse-metis-for-windows/releases,就会看到v1.3.0的更新说明:

  • For the convenience of users, SuiteSparse+METIS souces are now also bundled in this package.
  • Support for CUDA builds (Enable WITH_CUDA)

所以根本没有必要下载上面两个文件,用它的就可以了。当然了,你重新下载两个文件,并覆盖原来的文件也是可行的。只要你按照它的说明去做即可。(再说一遍,最好不要覆盖这两个文件)

3.  打开 SP_ROOT/metis/CMakeLists.txt,在行project(METIS)后面加上命令 cmake_policy(SET CMP0022 NEW),

即:

cmake_minimum_required(VERSION 2.8)
project(METIS)
cmake_policy(SET CMP0022 NEW)
set(GKLIB_PATH "GKlib" CACHE PATH "path to GKlib")
set(SHARED FALSE CACHE BOOL "build a shared library")if(MSVC)set(METIS_INSTALL FALSE)
else()set(METIS_INSTALL TRUE)
endif()# Configure libmetis library.
if(SHARED)set(METIS_LIBRARY_TYPE SHARED)
else()set(METIS_LIBRARY_TYPE STATIC)
endif(SHARED)include(${GKLIB_PATH}/GKlibSystem.cmake)
# Add include directories.
include_directories(${GKLIB_PATH})
include_directories(include)
# Recursively look for CMakeLists.txt in subdirs.
add_subdirectory("include")
add_subdirectory("libmetis")
add_subdirectory("programs")

另外,如果你要使用CUDA,注意版本,具体见图:

4.  运行 CMake (cmake-gui),

然后:

  • 设置"Source code"为SP_ROOT
  • 设置"Build" 路径为任何空的路径,一般SP_ROOT/build
  • 按 "Configure"。
  • 然后你会发现有很多红的地方,你可以点击它们,再"Configure",尤其注意的是为了避免一些编译器中关于复数可能会出      错,HAVE_COMPLEX 被关闭。(但是经过我在平台上再三测试,你最好不要去勾,否则很容易在后面的编译阶段发生错误.)
  • 按 "Generate"
如图:
5.编译和安装
在Visual Studio,打开SuiteSparseProject.sln,并且建立Debug 和Release两种模式下的INSTALL 工程(设为启动项目)。
可能会出现很多的警告,不过一切都是OK的。
6.注意: SuiteSparseConfig.cmake应该位于install路径下,它将用于你的项目正确地连接到SuiteSparse
如图即为cmake的结果:

这样的话,就安装好了。我们接下来,就可以使用了。我们是在Eigen中使用这个库的,因为Eigen已经封装了它的接口。

举例:

#include <iostream>
#include "Eigen/Eigen"
#include "Eigen/SPQRSupport"
using namespace Eigen ;
int main ( ) {SparseMatrix < double > A ( 4 , 4 ) ;std :: vector < Triplet < double > > triplets ;// 初始化非零元素int r [ 3 ] = { 0 , 1 , 2 } ;int c [ 3 ] = { 1 , 2 , 2 } ;double val [ 3 ] = { 6.1 , 7.2 , 8.3 } ;for ( int i = 0 ; i < 3 ; ++ i )triplets . push_back( Triplet < double >(r [ i ] , c [ i ] , val [ i ]) ) ;// 初始化稀疏矩阵A . setFromTriplets ( triplets . begin ( ) , triplets . end ( ) ) ;std :: cout << "A = \n" << A << std :: endl ;// 一个QR分解的实例SPQR < SparseMatrix < double > > qr ;// 计算分解qr . compute ( A ) ;// 求一个A x = bVector4d b ( 1 , 2 , 3 , 4 ) ;Vector4d x = qr . solve ( b ) ;std :: cout << "x = \n" << x ;std :: cout << "A x = \n" << A * x ;return 0 ;
}

具体可参考:< Eigen 3.2稀疏矩阵入门>。

使用方法:

安装好Eigen,将源程序路径加入vs2008的C++包含路径中,如图:

然后加入刚才编译的SuiteSparse库的相关文件。见图:

在项目-》属性-》C/c++ -》常规 -》附加包含目录中,加入SP_ROOT\build\install\include和SP_ROOT\build\install\include\suitesparse

链接器-》常规-》附加库目录,加入SP_ROOT\build\install\lib, SP_ROOT\build\install\lib\lapack_blas_windows

,SP_ROOT\build\install\lib64,SP_ROOT\build\lib\Debug

如图:

链接器-》输入-》附加依赖项,加入:

debug模式下:

libamdd.lib
libbtfd.lib
libcamdd.lib
libccolamdd.lib
libcholmodd.lib
libcolamdd.lib
libcxsparsed.lib
libklud.lib
libldld.lib
libspqrd.lib
libumfpackd.lib
suitesparseconfigd.lib
libblas.lib
liblapack.lib
metisd.lib

注意以上为debug模式下,Release模式下同理加入相对的lib。

Release模式下:

libamd.lib

libbtf.lib

libcamd.lib

libccolamd.lib

libcholmod.lib

libcolamd.lib

libcxsparse.lib

libklu.lib

libldl.lib

libspqr.lib

metis.lib

suitesparseconfig.lib

libblas.lib

liblapack.lib

最后在生成的debug文件下加入如下dll,

libblas.dll

libgcc_s_dw2-1.dll

libgfortran-3.dll

liblapack.dll

libquadmath-0.dll

可以在SP_ROOT\build\install\lib\lapack_blas_windows中找到,复制即可。

这样就可以运行了,结果为:

附:
我编译的库:

  • vs2008: http://pan.baidu.com/s/1bnme4Rd
  • vs2010:   http://pan.baidu.com/s/1dDr0bj7
  • vs2008测试例子:http://pan.baidu.com/s/1jGCU6lK
  • vs2010测试例子:http://pan.baidu.com/s/1qWL5MW0

Eigen+suitesparse for windows 安装相关推荐

  1. windows 安装metis_Eigen+suitesparse for windows 安装

    Eigen是著名的C++矩阵运算库,提供了许多矩阵运算的接口,主要包括两大部分,一部分是稠密矩阵,另一部分是稀疏矩阵.Eigen以源码形式提供给大家,用的时候,只要将源码包含在项目的包含路径上,具体安 ...

  2. Windows安装用于OCR的Tesseract及使用命令行参数进行OCR

    Windows安装用于OCR的Tesseract及使用命令行参数进行OCR 1. 效果图 2. Tesseract 安装及验证 参考 这篇博客将介绍如何安装和使用光学字符识别(OCR Optical ...

  3. 如何把Windows安装的所有打印机列出来

    [转]最近在论坛中不少网友问"如何把Windows安装的所有打印机列出来",在下面的程序中我们将把系统中所安装的打印机用列表框列出来,同时为默认打印机设置缺省值. 在下面的程序中我 ...

  4. 安装了email模块还是报错_Git windows安装及使用教程

    设置ssh秘钥 git仓库 基本信息设置 创建分支并上传 github重命名分支 切换分支并上传 其他命令 上传文件报错 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 G ...

  5. Windows 安装 pytorch3d

    Windows 安装 pytorch3d 首先安装pytorch,我安装的是v0.2.5 python 3.8 + cuda 10.2 + pytorch 1.7.1 + torchvision 0. ...

  6. windows 安装 spark 及 pycharm 调试 TopN 实例

    2019独角兽企业重金招聘Python工程师标准>>> 首先声明本文搭建的环境为:windows8.1 + spark1.6.0 + python2.7 + jdk8,spark o ...

  7. 计算机意外地重新启动或遇到错误。windows安装无法继续。若要安装windows 请单击 确定 重新启动计算机...

    快安装完系统时遇到提示:计算机意外地重新启动或遇到错误.Windows 安装无法继续.若要安装Windows,请单击"确定"重新启动计算机,然后重新启动安装".如下图所示 ...

  8. windows安装gnvm安装教程,node多版本解决方案

    windows安装gnvm安装教程,node多版本解决方案 参考文章: (1)windows安装gnvm安装教程,node多版本解决方案 (2)https://www.cnblogs.com/liuz ...

  9. windows安装TensorFlow和Keras遇到的问题及其解决方法

    windows安装TensorFlow和Keras遇到的问题及其解决方法 参考文章: (1)windows安装TensorFlow和Keras遇到的问题及其解决方法 (2)https://www.cn ...

最新文章

  1. 网站ui的配色有哪些需要注意的?
  2. python代码转换为pytorch_python、PyTorch图像读取与numpy转换
  3. kafka springboot配置_springboot 将日志导入kafka配置文件 logbackspring.xml(多环境)
  4. Centos下安装配置WordPress与nginx教程
  5. 路由协议redistribute重新分配“总结笔记”
  6. android listview使用自定义的adapter没有了OnItemClickListener事件解决办法
  7. redis 安装并设置为开机启动服务
  8. excel统计行数_百万到亿级数据,快速统计查询
  9. 登陆SQL Server 2008时提示评估期已过的解决办法
  10. java cglib map转bean_Java工具集-Bean对象与Map集合相互转换工具
  11. 服务器电源输出电压稳定,服务器电源选购指南
  12. 国行ps4服务器维护,不能登录其地区的PSN代表什么
  13. BGP通告路由的方法以及BGP静态路由下放
  14. echarts 动态设置y轴单位_Recharts动态设置y轴的最大值最小值
  15. tjh_pipeline_tools Maya工具盒 1.2.1 下载及教程 动画影视团队工具共享系统
  16. chrome 迅雷下载 支持插件, 让chrome支持迅雷
  17. 上传 visio 2003 基本形状图谱
  18. 数据库面试题:Redis如何保证数据一致性
  19. 黑群晖二合一已损毁_手动修复黑群晖已损毁磁盘空间
  20. Java 用键盘输入 int型 String型 char型数据 示例:简单计算功能 eclipse

热门文章

  1. XV6操作系统代码阅读心得(二):进程
  2. Yii框架 phpexcel 导出
  3. CodeForces 543D 树形DP Road Improvement
  4. 描述项目的典型用户与场景
  5. 中科燕园arcgis外包----排水管网地理信息系统
  6. Vue2的核心原理剖析
  7. 前端使用react-intl-universal进行国际化
  8. 示例解读 Python 2 和 Python 3 之间的主要差异
  9. (转载)Qt中MOC的一些限制
  10. 广义动量定理之速度V的应用分析