2016-01-05 78 views
2

我无法在Visual Studio 2013中为64位平台编译介绍性的Lapack代码。什么,我试图做总结:链接LAPACK,64位,Visual Studio 2013

  • 获取LAPACK并支持64位C++运行的软件,我在Visual Studio 2013年写
  • 我用在给定方向相同按照使用预建库(* .dll,* .lib & * .h)的方法,并引用我构建的库中的指令。

Visual Studio的步骤我走:

  • 我开始一个新项目 - 采摘的Visual C++空项目模板
  • 在项目属性中,我第一次去配置管理器,并创建一个新的x64的解决方案平台(复制Win32设置)
  • 然后,对于所有配置和所有平台,我将链接器附加库依赖关系指向我将预构建的* .lib文件放置到的位置。我也添加到链接器=>按照指示输入libblas.lib和liblapack.lib库。
  • 注意1:我没有添加任何Lapacke的东西,因为我不相信我试图运行的简单示例程序需要这些东西(并且添加这些路径在以前的尝试中似乎没有帮助)
  • 注2:我知道我下载的库只有64位 - 但我将这些项目属性应用于'所有平台'(意思是包括32位平台)以演示某些内容,如下所示...
  • 然后在Visual Studio中,我用www.cs.rochester.edu/~bh/cs400/using_lapack.html提供的代码添加了一个C++源文件'source.cpp'。下面的代码

#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; 
} 
  • 然后我尝试编译这个程序(在Debug或Release配置) - 为x64平台并且得到错误:

error LNK2019: unresolved external symbol dgesv_ referenced in function main

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

  • 非常奇怪的是,如果我将平台更改为'win32',项目编译! (呵?)所以它为32位平台找到这些库。 (顺便说一句,如果我尝试运行那里产生的可执行文件,我得到一个错误,一个* .dll文件丢失 - 因为我只下载了64位库,这并不奇怪...)

此外,在代码也dgesv_前添加下划线似乎不工作 - 给我在编译时错误:

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

这也与一些讨论在icl.cs.utk.edu/lapack-跟踪论坛/ viewtopic.php?F = 12 & T = 4260

同样,这整个问题似乎在http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=12&t=4260和乡亲那里追踪的讨论似乎表明,自行构建图书馆与CMake的是一个解决方案(我想这一点,但运行到问题的存在它没有找到在MinGW的-W64库正确的Fortran编译器,我下载< =这可能适用于不同的职位!)。更重要的是,在该线程的帖子的最后,“管理员”表示,他们以前纠正任何问题,这些预建libaries,他们应该现在的工作。所以我必须做一些不正确的事,对吗?有没有人在我使用的工作流程中看到问题?

回答

1

我的工作多一些关于这个(与上LAPACK论坛的一些人接口)。有两个职位没有描述的细节: