DLLEXPORT MKL_INT s_qr_solve(MKL_INT m, MKL_INT n, MKL_INT bn, float a[], float b[], float x[], float work[], MKL_INT len) { MKL_INT info = 0; MKL_INT* jpvt = new MKL_INT[n]; MKL_INT rank = 0; float cond = -1.0; float* clone_a = new float[m*n]; std::memcpy(clone_a, a, m*n*sizeof(float)); float* clone_b = new float[m*bn]; std::memcpy(clone_b, b, m*bn*sizeof(float)); sgelsy_(&m, &n, &bn, clone_a, &m, clone_b, &m, jpvt, &cond, &rank, work, &len, &info); for (MKL_INT i = 0; i < n; ++i) { for (MKL_INT j = 0; j < bn; ++j) { x[j * n + i] = clone_b[j * m + i]; } } delete[] jpvt; delete[] clone_a; delete[] clone_b; return info; }