代码之家  ›  专栏  ›  技术社区  ›  Alex319

为什么在Windows上安装lapack的预编译版本时出错?

  •  3
  • Alex319  · 技术社区  · 15 年前

    我正在尝试使用犰狳矩阵库来进行矩阵计算,它需要blas和lapack。Armadillo文档建议从 http://www.stanford.edu/~vkl/code/libs.html

    其中有.lib和.dll文件。唯一的问题是我不知道如何让Visual Studio(2008速成版)识别这些文件。我尝试将它们复制到VisualC++的包含和LIB目录中。 C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\ 但是它似乎没有做任何事情,因为当我试图编译程序时,我得到了许多“未解决的外部符号”错误,这些错误表示它找不到lapack函数。

    编辑:

    以下是错误消息:

    1>Linking...  
    1>LINK : warning LNK4076: invalid incremental status file 'C:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\Debug\TentPitcher.ilk'; linking nonincrementally  
    1>   Creating library C:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\Debug\TentPitcher.lib and object C:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\Debug\TentPitcher.exp  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _zgetrf_ referenced in function "void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)" (??$getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _zgetrf_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _cgetrf_ referenced in function "void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)" (??$getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _cgetrf_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _dgetrf_ referenced in function "void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)" (??$getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _dgetrf_
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _sgetrf_ referenced in function "void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)" (??$getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _sgetrf_
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _zgemv_ referenced in function "void __cdecl arma::blas::gemv_(char const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemv_@N@blas@arma@@YAXPBDPBH1PBN21212PAN1@Z)
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _zgemv_
    1>TwoCell3DXT.obj : error LNK2001: unresolved external symbol _zgemv_
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _cgemv_ referenced in function "void __cdecl arma::blas::gemv_(char const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemv_@N@blas@arma@@YAXPBDPBH1PBN21212PAN1@Z)
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _cgemv_
    1>TwoCell3DXT.obj : error LNK2001: unresolved external symbol _cgemv_
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _dgemv_ referenced in function "void __cdecl arma::blas::gemv_(char const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemv_@N@blas@arma@@YAXPBDPBH1PBN21212PAN1@Z)
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _dgemv_
    1>TwoCell3DXT.obj : error LNK2001: unresolved external symbol _dgemv_
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _sgemv_ referenced in function "void __cdecl arma::blas::gemv_(char const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemv_@N@blas@arma@@YAXPBDPBH1PBN21212PAN1@Z)
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _sgemv_
    1>TwoCell3DXT.obj : error LNK2001: unresolved external symbol _sgemv_
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _zgemm_ referenced in function "void __cdecl arma::blas::gemm_(char const *,char const *,int const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemm_@N@blas@arma@@YAXPBD0PBH11PBN21212PAN1@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _zgemm_  
    1>TwoCell3DXT.obj : error LNK2001: unresolved external symbol _zgemm_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _cgemm_ referenced in function "void __cdecl arma::blas::gemm_(char const *,char const *,int const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemm_@N@blas@arma@@YAXPBD0PBH11PBN21212PAN1@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _cgemm_  
    1>TwoCell3DXT.obj : error LNK2001: unresolved external symbol _cgemm_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _dgemm_ referenced in function "void __cdecl arma::blas::gemm_(char const *,char const *,int const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemm_@N@blas@arma@@YAXPBD0PBH11PBN21212PAN1@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _dgemm_  
    1>TwoCell3DXT.obj : error LNK2001: unresolved external symbol _dgemm_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _sgemm_ referenced in function "void __cdecl arma::blas::gemm_(char const *,char const *,int const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemm_@N@blas@arma@@YAXPBD0PBH11PBN21212PAN1@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _sgemm_  
    1>TwoCell3DXT.obj : error LNK2001: unresolved external symbol _sgemm_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _zgetri_ referenced in function "void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)" (??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _zgetri_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _cgetri_ referenced in function "void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)" (??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _cgetri_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _dgetri_ referenced in function "void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)" (??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _dgetri_  
    1>Cell3DXT.obj : error LNK2019: unresolved external symbol _sgetri_ referenced in function "void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)" (??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
    1>ThreeCell3DXT.obj : error LNK2001: unresolved external symbol _sgetri_  
    1>TwoCell3DXT.obj : error LNK2019: unresolved external symbol _dgesvd_ referenced in function "void __cdecl arma::lapack::gesvd_(char *,char *,int *,int *,double *,int *,double *,double *,int *,double *,int *,double *,int *,int *)" (??$gesvd_@N@lapack@arma@@YAXPAD0PAH1PAN122121211@Z)  
    1>TwoCell3DXT.obj : error LNK2019: unresolved external symbol _sgesvd_ referenced in function "void __cdecl arma::lapack::gesvd_(char *,char *,int *,int *,double *,int *,double *,double *,int *,double *,int *,double *,int *,int *)" (??$gesvd_@N@lapack@arma@@YAXPAD0PAH1PAN122121211@Z)  
    1>C:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\Debug\TentPitcher.exe : fatal error LNK1120: 18 unresolved externals  
    1>Build log was saved at "file://c:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\TentPitcher\Debug\BuildLog.htm"  
    1>TentPitcher - 43 error(s), 1 warning(s)
    

    Cell3DXT “,” TwoCell3DXT “和” ThreeCell3DXT “是我自己的代码中的类。同样在上面的lapack和blas文件中,也有“.exp文件”-这些文件是什么,它们与问题有什么关系?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Alex319    15 年前

    我找到了我问题的答案。问题是,我知道我必须将包含lapack.lib文件的目录放入库目录列表中(工具->选项->项目和解决方案->vc++目录->库文件),但忘记了我还必须将其添加到项目->(项目名称)属性->链接器->下的“其他依赖项”中。输入。

        2
  •  0
  •   Mahmood Amintoosi    15 年前

    我也有同样的问题,但我解决了如下问题:

    1. 从维克托的网站下载并提取lapack(lib+dll)和blass(lib+dll)。
    2. 将lapack和blass路径添加到链接器搜索目录,例如code::blocks中的“project->build options->search directories->linker”,
    3. 将lapack_win32.lib添加到链接器设置,
    4. 在[armadillo path]/include/armadillo-bits/config.hpp中取消注释“define arma-use-lapack”