PardisoSolver.h のような通常の C++ クラスがあります。
#ifndef PARDISOSOLVER_H_
#define PARDISOSOLVER_H_
class PardisoSolver {
public:
/* Initializes a new Solver with the given matrix in CSR */
PardisoSolver(
int* ia,
int* ja,
double* a,
int n,
int nja);
virtual ~PardisoSolver();
void setMatrixType(int mtype);
void pardisoSymFactorize();
private:
static int get_nproc(void);
void handle_error(int ierror, int line);
int* ia; // row indices
int* ja; // column pointer
double* a; // non zero values
int n_eq; // size of matrix
int nja; // number of non zero elements
bool factorized;
/* PARDISO SETTINGS */
void *pt[64];
int maxfct;
int mnum;
int mtype;
int perm;
int nrhs;
int iparm[64];
int msglvl;
int error;
double dparm[64];
double dzero;
int izero;
};
#endif /* PARDISOSOLVER_H_ */
一方、実装は PardisoSolver.cpp にあります。ここでは、クラスの実装と一緒に C 関数の宣言を追加しています。
extern "C" void pardiso (void *, int *, int *, int *, int *, int *,
double *, int *, int *, int *, int *, int *,
int *, double *, double *, int *, double *);
今、その関数を次のように呼び出そうとすると
pardiso (pt, &maxfct, &mnum, &mtype, &phase,
&n_eq, a, ia, ja, &izero, &nrhs,
iparm, &msglvl, &dzero, &dzero, &error, dparm);
コンパイルエラーが発生します
PardisoSolver.cpp:94: undefined reference to `pardiso'
呼び出しは 94 行目にあります。C 関数を間違った場所で宣言しましたか? 私が得たように、クラスのメンバーになることはできないため、これを呼び出す方法にする必要があります。助けてくれてありがとう。