链接 LAPACK,64 位,Visual Studio 2013

Linking LAPACK, 64-bit, Visual Studio 2013

我无法在 Visual Studio 2013 中为 64 位平台编译介绍性的 Lapack 代码。我正在尝试做的事情的总结:

Visual Studio 我正在采取的步骤:

 #include < stdio.h>

 extern "C" void dgesv_(const int *N, const int *nrhs, double *A, const int *lda, int *ipiv, double *b, const int *ldb, int *info);
 extern "C" void dgels_(const char *trans, const int *M, const int *N, const int *nrhs, double *A, const int *lda, double *b, const int *ldb, double *work,
 const int * lwork, int *info);

int main(void)
{
    double A[9] = { 76, 27, 18, 25, 89, 60, 11, 51, 32 };
    double b[3] = { 10, 7, 43 };

    int N = 3;
    int nrhs = 1;
    int lda = 3;
    int ipiv[3];
    int ldb = 3;
    int info;

    dgesv_(&N, &nrhs, A, &lda, ipiv, b, &ldb, &info);

    if (info == 0) /* succeed */
        printf("The solution is %lf %lf %lf\n", b[0], b[1], b[2]);
    else
        fprintf(stderr, "dgesv_ fails %d\n", info);

    return info;
}

error LNK2019: unresolved external symbol dgesv_ referenced in function main

这似乎表明预建库不包含这些功能。

此外,在代码中的 dgesv_ 之前添加下划线似乎也不起作用 - 编译时出现错误:

fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'

这也跟踪了 icl.cs.utk.edu/lapack-forum/viewtopic.php?f=12&t=4260

的一些讨论

同样,整个问题似乎都在跟踪 http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=12&t=4260 上的讨论,那里的人似乎表明使用 CMAKE 自己构建库是一个解决方案(我正在尝试,但 运行ning问题是它在我下载的 MinGW-W64 库中找不到合适的 fortran 编译器 <= 这可能适合不同的 post!)。更重要的是,在该线程的最后 post 中,'admin' 表示他们纠正了这些预构建库之前的任何问题,并且它们现在应该可以工作了。所以我一定是做错了什么,对吧?有人看到我在这里使用的工作流程有问题吗?

我在这方面做了更多工作(并在 Lapack 论坛上与一些人交流)。那里有两个 post 描述了细节: