在Win32上的LAPACK

我一直在探索在matrix上需要一些工作的algorithm,并且我已经在我的Linux机器上得到了一些简单的代码。 这是一个摘录:

extern "C" { // link w/ LAPACK extern void dpptrf_(const char *uplo, const int *n, double *ap, int *info); extern void dpptri_(const char *uplo, const int *n, double *ap, int *info); // BLAS todo: get sse2 up in here (ATLAS?) extern void dgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, const double *beta, double *c, const int *ldc); } // in-place: be sure that (N*(N+1)/2) doubles have been initialized inline void invert_mat_sym_packed(double *vd, int n) { int out = 0; dpptrf_("U",&n,vd,&out); ASSERT(!out); dpptri_("U",&n,vd,&out); ASSERT(!out); } // use with col-major ordering!!! inline void mult_cm(double *a, double *b, double alpha, int m, int k, int n, double *c) { int lda = m, ldb = k, ldc = m; double beta = 1.0; dgemm_("N","N",&m,&n,&k,&alpha,a,&lda,b,&ldb,&beta,c,&ldc); } 

我所要做的就是sudo apt-get install liblapack ,并链接到库。

我现在试图从这里使用32位DLL的MinGW这个代码工作,但我看到segfaults和无效的输出。 我将继续使用gdb来确定错误的位置,但我怀疑有一个更好,更干净,更便携的方法来完成这个工作。

我所做的是编译安装fortran for mingwmingw-get install fortran )并链接到32位BLAS和LAPACK dll的早期链接。

我不知道我有多less在这里错过…当用gcc for win32编码时,其他人如何得到他们的LAPACK?

我正在寻找的是一个易于使用的C界面。 我不想在所有的地方包装类。

我试图find英特尔MKL的下载…甚至没有自由软件!

我解决了这个问题。 这与我调用例程的方式无关,在将值累加到它们之前,我没有将我的缓冲区memset为零。

调用Fortran例程基本上和从Linux一样简单。

然而,另一个相当严重的问题出现了:一旦我使用lapack例程,我的程序不再处理异常。 看到这里 。