此错误通常是由于Armaddilo和Open3D同时使用了Intel MKL库,在编译时链接了两个不同版本的MKL库,导致参数不兼容而引起的。可以尝试在编译时明确指定链接到同一版本的MKL库,或者在代码中显式指定使用哪个MKL库。以下是一个示例:
#include
#include
int main() {
// 显式指定使用MKL库版本
const char* mkl_version = "mkl_rt";
lapack_int m, n, nrhs, lda, ldb, rank;
double wkopt;
double* work;
lda = n;
ldb = nrhs;
m = 3;
n = 3;
nrhs = 1;
arma::mat A(m, n, arma::fill::randu);
arma::mat B(m, nrhs, arma::fill::randu);
arma::vec S;
arma::mat U, V;
arma::svd(A, S, U, V);
wkopt = 0;
LAPACK(mkl_version)->gelsd(&m, &n, &nrhs, A.memptr(), &lda, B.memptr(), &ldb, S.memptr(), &wkopt, &lwork, &rank);
lwork = (int)wkopt;
work = new double[lwork];
LAPACK(mkl_version)->gelsd(&m, &n, &nrhs, A.memptr(), &lda, B.memptr(), &ldb, S.memptr(), &wkopt, &lwork, &rank);
delete[] work;
return 0;
}
在代码中,我们使用了LAPACK(mkl_version)
来显式指定使用的MKL库版本mkl_rt
。这样就可以消除DGELSD的参数异常错误。
上一篇:包含按星期几营业时间的组对象
下一篇:包含ArrayList的对象