c++ - Win32 上的 LAPACK

标签 c++ windows mingw lapack

我一直在探索需要在矩阵上做一些工作的算法,并且我已经获得了一些可以在我的 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,然后链接到库。

我现在正尝试使用来自 here 的 32 位 dll 从 MinGW 获取此代码。但我看到了段错误和无效输出。我将继续使用 gdb 来确定错误的位置,但我怀疑有更好、更干净、更便携的方法来完成这项工作。

为了编译它,我所做的是为 mingw 安装 fortran(mingw-get install fortran)并从前面的链接链接到 32 位 BLAS 和 LAPACK dll。

我不确定我在这里遗漏了多少...当使用 gcc for win32 编码时,其他人如何让他们的 LAPACK 运行?

我正在寻找的是一个易于使用的 C 接口(interface)。我不想到处都是包装类。

我试图找到英特尔 MKL 的下载...甚至不是免费软件!?

最佳答案

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

调用 Fortran 例程基本上与在 Linux 中调用一样简单。

然而,另一个相当严重的问题出现了:一旦我使用了 lapack 例程,我的程序就不再处理异常。参见 here .

关于c++ - Win32 上的 LAPACK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640351/

相关文章:

windows - 用于在 Mac 上进行网站测试的虚拟化 Windows 7 和 IE VHD - 需要什么?

c++ - 如何创建一个以 HWND 作为父级的 QWidget?

gcc - 如何阻止 MinGW 和 MSYS 修改命令行中给出的路径名

cygwin - 需要 ZMQ 的 64 位二进制文​​件,还是非 MSVC 环境(cygwin/mingw)的构建指令?

c++ 指向另一个类错误的指针 "no operator matches these operands."

c++ - C++ 标准到底在哪里说取消引用未初始化的指针是未定义的行为?

windows - 从 mac 访问 windows localhost

opencv - CodeBlocks IDE Open CV MingW Windows 7

c++ - std::function 的解释

c++ - 如何比较两个小时并说出哪个更晚或更早?