Eigen+suitesparse for windows 安装

标签: c++ Eigen SuiteSparse
10037人阅读 评论(20) 收藏 举报
分类:

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 = b
	Vector4d 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中找到,复制即可。

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



附:
我编译的库:


查看评论

windows 7 下VS2013编译Ceres,含suitesparse的部分

最近在做一个需要用到ceres的项目,搞了很久也没配置好,发现网上很多资料都不全面,甚至误导!因此写下这篇博客,希望对有需要的同学有所帮助。 首先,大部分的信息都可以从官网找到 http://ww...
  • u013468168
  • u013468168
  • 2017-06-16 17:08:28
  • 947

suitesparse1.3.0配win10+vs2015

在网上看了很多博客,均未成功,故成功以后想记录下来,方便自己,方便他人。 下载或克隆Gthub上最新的项目版本,本版本为v1.3.0,然后解压到某个本地文件下记为SP_ROOT 把SP_ROOT下的C...
  • zpp13hao1
  • zpp13hao1
  • 2017-03-15 10:48:17
  • 999

稀疏矩阵求解的一点总结

前段时间遇到一些稀疏矩阵的问题,主要是求解大型的非齐次线性方程组:Ax = b, 其中 A是一个大型的稀疏矩阵,可能有上万或十万阶,根据A的特点可能有下面一些求解方法: 1. A 是一个对称正定矩阵...
  • xiaotie1005
  • xiaotie1005
  • 2015-07-03 20:43:16
  • 3794

Ubuntu14.04下配置CGAL+boost+QT+Suitesparse

这两天突然间想把以前在linux在没有调通的程序给调通,
  • liangguangqiang
  • liangguangqiang
  • 2014-10-02 22:02:24
  • 2042

suitesparse-metis-for-windows-master

  • 2015年09月08日 18:45
  • 37.21MB
  • 下载

g2o在ubuntu16.04安装及初步使用

转载自:http://www.linuxdiyf.com/linux/25329.html       http://blog.csdn.net/jasmine_shine/article/detai...
  • zpp13hao1
  • zpp13hao1
  • 2016-12-30 14:24:45
  • 3541

suitesparse-metis-for-windows Bug记录

suitesparse-metis-for-windows Bug记录Bug error C2059: syntax error : '(' C:\Program Files (x86)\Micro...
  • corfox_liu
  • corfox_liu
  • 2016-06-03 11:19:30
  • 609

Windows 配置 Ceres-solver

Windows 配置 Ceres-solver (Visual Studio) Ceres Solver是由Google开发的非线性最小二乘问题求解工具包 本文重点 安装必备及下载 安装步骤 ...
  • woaik110
  • woaik110
  • 2015-05-25 15:17:54
  • 6660

Windows下Eigen配置及测试

Eigen是一个用于线性代数、矩阵向量运算及算法的纯C++模板函数库。 Eigen is a C++ template library for linear algebra: matrices, ve...
  • hijack00
  • hijack00
  • 2016-09-27 09:30:33
  • 3447

Eigen: C++开源矩阵计算工具——安装与使用

因为最近在研究卡尔曼滤波,要用到矩阵运算,就想着用C++一次性把矩阵运算写好吧,写一半觉得这么基础的工具应该有人写过吧,发现有很多库!!!有人做了总结:C++矩阵运算库推荐 矩阵运算库Armadill...
  • u011574296
  • u011574296
  • 2016-09-18 19:58:28
  • 2467
    个人资料
    持之以恒
    等级:
    访问量: 34万+
    积分: 4718
    排名: 7686
    个人网站
    最新评论