C++ 使用带特征值的pardiso解算器

C++ 使用带特征值的pardiso解算器,c++,algorithm,g++,eigen,pardiso,C++,Algorithm,G++,Eigen,Pardiso,我试图用eigen使用pardiso解算器求解非常大的稀疏矩阵系统(Ax=b)。 当我使用g++编译代码时,会出现以下错误: In file included from ${Eigenroot}/Eigen/PardisoSupport:31, from code.cpp:8: ${Eigenroot}/Eigen/src/PardisoSupport/PardisoSupport.h: In static member function 'static Ind

我试图用
eigen
使用
pardiso
解算器求解非常大的
稀疏矩阵系统(Ax=b)
。 当我使用
g++
编译代码时,会出现以下错误:

In file included from ${Eigenroot}/Eigen/PardisoSupport:31,
                 from code.cpp:8:
${Eigenroot}/Eigen/src/PardisoSupport/PardisoSupport.h: In static member function 'static IndexType Eigen::internal::pardiso_run_selector<IndexType>::run(void*, IndexType, IndexType, IndexType, IndexType, IndexType, void*, IndexType*, IndexType*, IndexType*, IndexType, IndexType*, IndexType, void*, void*) [with IndexType = int]':
${Eigenroot}/Eigen/src/PardisoSupport/PardisoSupport.h:269:   instantiated from 'Derived& Eigen::PardisoImpl<Derived>::compute(const typename Eigen::internal::pardiso_traits<Derived>::MatrixType&) [with Derived = Eigen::PardisoLU<Eigen::SparseMatrix<double, 0, int> >]'
${Eigenroot}/Eigen/src/PardisoSupport/PardisoSupport.h:409:   instantiated from 'Eigen::PardisoLU<_MatrixType>::PardisoLU(const MatrixType&) [with MatrixType = Eigen::SparseMatrix<double, 0, int>]'
code.cpp:82:   instantiated from here
${Eigenroot}/Eigen/src/PardisoSupport/PardisoSupport.h:50: error: cannot convert 'int*' to 'const long long int*' for argument '2' to 'void pardiso(void*, const long long int*, const long long int*, const long long int*, const long long int*, const long long int*, const void*, const long long int*, const long long int*, long long int*, const long long int*, long long int*, const long long int*, void*, void*, long long int*)'
并使用
g++
将其编译为

g++ -I ${Eigenroot} -DEIGEN_USE_MKL_ALL -DMKL_ILP64 -m64 -I ${mklroot}/linux/mkl/include -o out.out code.cpp -L ${mklroot}/linux/mkl/lib/intel64 -Wl, -lmkl_intel_ilp64 -lmkl_gnu_thread -lmkl_core -lmkl_blacs_intelmpi_ilp64 -lgomp -lpthread -lm -ldl

ILP64链接可能会出现一些问题。您是否可以尝试在没有-DMKL_ILP64选项的情况下链接,并使用-lmkl_intel_lp64而不是-lmkl_intel_ILP64来链接?

您在哪里声明了
B
x
?或
三重列表
?确保您发布的代码代表您的问题(不要遗漏重要部分)。阅读如何生成一个。实际上,B和x与这个问题无关,所以我没有包括这些部分。我尝试了//g++-I${Eigenroot}-DEIGEN_-USE_MKL_ALL-m64-I${mklroot}/linux/MKL/include out.out code.cpp-L${mklroot}/linux/MKL/lib/intel64-Wl,-lmkl_intel_lp64-lmkl_gnu_thread-lmkl_core-lmkl_blacs_intelmpi_ilp64-lgomp-lpthread-lm-ldl//但也出现了这些错误/usr/bin/ld::无此类文件:无此类文件或目录集合2:ld返回1退出状态
g++ -I ${Eigenroot} -DEIGEN_USE_MKL_ALL -DMKL_ILP64 -m64 -I ${mklroot}/linux/mkl/include -o out.out code.cpp -L ${mklroot}/linux/mkl/lib/intel64 -Wl, -lmkl_intel_ilp64 -lmkl_gnu_thread -lmkl_core -lmkl_blacs_intelmpi_ilp64 -lgomp -lpthread -lm -ldl