我无法在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;
}
错误LNK2019:函数main
中引用了未解析的外部符号dgesv_
似乎表明预构建的库不包含这些函数。
另外,在代码中在dgesv_之前添加下划线似乎也不起作用 - 在编译时给我错误:
致命错误LNK1112:模块机器类型&#39; X86&#39;与目标机器类型冲突&#39; x64&#39;
也跟踪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自己构建库是一种解决方案(我试过这个但是遇到了问题)我没有在我下载的MinGW-W64库中找到合适的fortran编译器&lt; =那可能适用于不同的帖子!)。更重要的是,在该主题的最后一篇文章中,&#39; admin&#39;表示他们纠正了这些预先建立的图书馆的任何先前问题,并且他们现在应该工作。所以我一定做错了,对吗?有没有人在我在这里使用的工作流程中看到问题?
答案 0 :(得分:1)
我在这方面做了更多的工作(并在Lapack讨论论坛上与一些人交流)。那里有两个帖子描述了细节:
第一个,http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=12&t=4873&p=11711#p11711,基本上重复了我上面提到的问题。该界面的结论是icl.c.utk.edu上提供的预建库已经过时,我的系统已经过时了,我被鼓励使用CMake构建我自己的Lapack库。
第二篇文章http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=12&t=4875&p=11710#p11710描述了一个问题,我正在让CMake生成这些库。我正在遵循http://icl.cs.utk.edu/lapack-for-windows/lapack/#build的详细说明,但在如何使用CMake时犯了一个错误。最重要的是,我需要在CMake中指定'MinGW Makefiles'作为我的'生成器'(我指的是'visual studio'!)。一旦我这样做,一切都按原始说明进行,我能够编译上面描述的简单Visual Studio项目。