【问题标题】:Linking LAPACK, 64-bit, Visual Studio 2013链接 LAPACK,64 位,Visual Studio 2013
【发布时间】:2016-01-05 00:54:23
【问题描述】:

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

  • 启动并运行 Lapack 以支持我在 Visual Studio 2013 中编写的 64 位 C++ 软件。
  • 我正在使用与 http://icl.cs.utk.edu/lapack-for-windows/lapack/#build 相同的说明,方法是按照说明使用预构建库(*.dll、*.lib 和 *.h)并在我的构建中引用这些库。

我正在执行的 Visual Studio 步骤:

  • 我开始一个新项目 - 选择 V​​isual C++ Empty Project 模板
  • 在项目属性中,我首先进入配置管理器,新建一个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;
}
  • 然后我尝试为 x64 平台编译此程序(在调试或发布配置中)并得到错误:

错误 LNK2019:函数 main 中引用的未解析的外部符号 dgesv_

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

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

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

致命错误 LNK1112:模块机器类型“X86”与目标机器类型“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 自己构建库是一种解决方案(我正在尝试,但遇到了问题,找不到合适的我下载的 MinGW-W64 库中的 fortran 编译器

【问题讨论】:

    标签: c++ visual-studio 64-bit lapack


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2014-03-01
      • 2014-12-22
      相关资源
      最近更新 更多