windows 安装metis_Win10 VS2013 suitesparse-metis-for-windows 1.3.1

本文档详细介绍了如何在Windows 10上安装suitesparse-metis-for-windows 1.3.1,包括解决在VS2013中遇到的关于metis/GKlib/gk_arch.h的bug,以及通过CMake构建测试程序的方法。安装后,通过设置环境变量和链接库,成功进行SuiteSparse库的测试。
摘要由CSDN通过智能技术生成

suitesparse-metis-for-windows 1.3.1 安装包内附SuiteSparse 4.5.1, Metis 5.1.0和 lapack 3.4.1

Github上面由整理好的suitesparse包适合在Windows安装 https://github.com/jlblancoc/suitesparse-metis-for-windows,并附有详细的安装指导,但是会有一点bug

问题1:metis/GKlib/gk_arch.h中有个bug,从C++11开始标准库中已经支持rint函数了,VS 2013开始支持这一函数,修复方式

#ifdef __MSC__/*MSC does not have rint() function*/

#if (_MSC_VER < 1800)  /*visual studio 2013编译器版本*/

#define rint(x) ((int)((x)+0.5))

#endif

/*MSC does not have INFINITY defined*/#ifndef INFINITY#define INFINITY FLT_MAX

#endif

#endif

#endif

安装后测试方式

1.在环境变量中设置SuiteSparse_DIR位置是SuiteSoarse的安装位置,例如C:\Program Files (x86)\Suitesparse

2.测试程序

#include #include"Eigen/Eigen"#include"Eigen/SPQRSupport"using namespace Eigen;intmain() {

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 <<:endl>

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" <

std::cout<< "A x = \n" << A *x;

getchar();

return0;

}

2.相同文件夹下的CMakeLists.txt

# -----------------------------------------------# Test CMake scriptforbuilding against SuiteSparse

# http://code.google.com/p/suitesparse-metis-for-windows/

# Created by Jose Luis Blanco (University of Almeria) 2013# Updated by jesnault ([email protected])2014-01-21#-----------------------------------------------PROJECT(CholmodExample)

cmake_minimum_required(VERSION2.8)

#------------------------------------------------------------------# Detect SuiteSparse libraries:

# If not found automatically, set SuiteSparse_DIRinCMake to the

# directory where SuiteSparse was built.

#------------------------------------------------------------------LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../../cmakemodule/") # Add the directory where FindSuiteSparse.cmake module can be found.

set(SuiteSparse_USE_LAPACK_BLAS ON)

find_package(SuiteSparse QUIET NO_MODULE) # 1st: Try tolocate the *config.cmake file.if(NOT SuiteSparse_FOUND)

#set(SuiteSparse_VERBOSE ON)

find_package(SuiteSparse REQUIRED) # 2nd: Use FindSuiteSparse.cmake module

include_directories(${SuiteSparse_INCLUDE_DIRS})else()

message(STATUS"Find SuiteSparse : include(${USE_SuiteSparse})")

include(${USE_SuiteSparse})

endif()

MESSAGE(STATUS"SuiteSparse_LIBS: ${SuiteSparse_LIBRARIES}")

#------------------------------------------------------------------# End of SuiteSparse detection

#------------------------------------------------------------------#------------------------------------------------------------------# Declare an example program:

#------------------------------------------------------------------ADD_EXECUTABLE(cholmod-test cholmod-test.c)

TARGET_LINK_LIBRARIES(cholmod-test ${SuiteSparse_LIBRARIES})

3.命名文件夹src,并将上面两个文件放进去,并创建build文件夹,利用cmake的configure和generate Visual Studio2013工程文件,直接生成就可以(根据自己的FindSuiteSparse.cmake文件的位置设置CMakeLists.txt中变量CMAKE_MODULE_PATH的位置)即可

4.如果不使用cmake工具,记得在VS的工程属性中设置lapack和suitesparse库的安装位置,链接如下库即可

C:\Program Files (x86)\Suitesparse\lib64\metisd.lib

C:\Program Files (x86)\Suitesparse\lib\suitesparseconfigd.lib

C:\Program Files (x86)\Suitesparse\lib\libamdd.lib

C:\Program Files (x86)\Suitesparse\lib\libbtfd.lib

C:\Program Files (x86)\Suitesparse\lib\libcamdd.lib

C:\Program Files (x86)\Suitesparse\lib\libccolamdd.lib

C:\Program Files (x86)\Suitesparse\lib\libcolamdd.lib

C:\Program Files (x86)\Suitesparse\lib\libcholmodd.lib

C:\Program Files (x86)\Suitesparse\lib\libcxsparsed.lib

C:\Program Files (x86)\Suitesparse\lib\libklud.lib

C:\Program Files (x86)\Suitesparse\lib\libldld.lib

C:\Program Files (x86)\Suitesparse\lib\libumfpackd.lib

C:\Program Files (x86)\Suitesparse\lib\libspqrd.lib

C:\Program Files (x86)\Suitesparse\lib\lapack_blas_windows\libblas.lib

C:\Program Files (x86)\Suitesparse\lib\lapack_blas_windows\liblapack.lib

kernel32.lib

user32.lib

gdi32.lib

winspool.lib

shell32.lib

ole32.lib

oleaut32.lib

uuid.lib

comdlg32.lib

#输出结果如下

b

94ecb402353101f74ce237ff1ec74540.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值