首页 > 解决方案 > macOS Catalina 上 SuperLU 的犰狳错误

问题描述

我一直在尝试使用犰狳线性代数库运行以下程序。使用稀疏矩阵,我需要安装 SUPERLU 4.3。我首先安装了 SUPERLU 5.2,但由于犰狳文档说它只适用于 4.3 版,所以我安装了 SUPERLU 4.3。

//
//  main.cpp
//  SpMat_Test
//
//  Created by Arash Fahim on 1/28/20.
//  Copyright © 2020 Arash Fahim. All rights reserved.
//

#include <iostream>
#include <armadillo>

using namespace arma;

int main() {
    // insert code here...
    sp_mat A = sprandu(2000, 2000, 0.01);
    vec B=ones<vec>(2000);
    vec x = spsolve(A, B);
    return 0;
}

添加SUPERLU前,程序编译生成

error: spsolve(): use of SuperLU must be enabled
libc++abi.dylib: terminating with uncaught exception of type std::logic_error: spsolve(): use of SuperLU must be enabled
Program ended with exit code: 9

但是,在SUPERLU之后,错误信息变成了

$ g++ -g  main.cpp -larmadillo
In file included from main.cpp:10:
In file included from /usr/local/include/armadillo:88:
/usr/local/include/armadillo_bits/include_superlu.hpp:95:12: error: '/supermatrix.h' file not found, did you mean 'supermatrix.h'?
  #include ARMA_INCFILE_WRAP(ARMA_SLU_SUPERMATRIX_H)
           ^
/usr/local/include/armadillo_bits/compiler_setup.hpp:79:30: note: expanded from macro 'ARMA_INCFILE_WRAP'
#define ARMA_INCFILE_WRAP(x) <x>
                             ^
In file included from main.cpp:10:
In file included from /usr/local/include/armadillo:88:
/usr/local/include/armadillo_bits/include_superlu.hpp:96:12: error: '/superlu_enum_consts.h' file not found, did you mean 'superlu_enum_consts.h'?
  #include ARMA_INCFILE_WRAP(ARMA_SLU_SUPERLU_ENUM_CONSTS_H)
           ^
/usr/local/include/armadillo_bits/compiler_setup.hpp:79:30: note: expanded from macro 'ARMA_INCFILE_WRAP'
#define ARMA_INCFILE_WRAP(x) <x>
                             ^
2 errors generated.

我检查了两个文件'/superlu_enum_consts.h'和'/supermatrix.h'都存在于编译器应该找到的路径中,我猜。我太大了,无法理解出了什么问题。

标签: c++armadillomacos-catalina

解决方案


推荐阅读