1. 程式人生 > >Win10 VS2013 suitesparse-metis-for-windows 1.3.1

Win10 VS2013 suitesparse-metis-for-windows 1.3.1

命名 script http ont directory can 結果 exe 標準庫

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 <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; getchar(); return 0; }

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

# -----------------------------------------------
# Test CMake script for building 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(VERSION 2.8)

# ------------------------------------------------------------------
# Detect SuiteSparse libraries:
# If not found automatically, set SuiteSparse_DIR in CMake 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 to locate 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技術分享圖片

Win10 VS2013 suitesparse-metis-for-windows 1.3.1