为什么在 Windows 上安装预编译版本的 LAPACK 时出现错误?
-
22-09-2019 - |
题
我正在尝试使用犰狳矩阵库进行矩阵计算,它需要 BLAS 和 LAPACK。Armadillo 文档建议从以下位置获取预编译版本 http://www.stanford.edu/~vkl/code/libs.html
里面有.lib和.dll文件。唯一的问题是我不知道如何让 Visual Studio(Express Edition 2008)识别这些文件。我尝试将它们复制到 Visual C++ include 和 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 文件”——它们是什么?它们与问题有关系吗?
解决方案
我想通了,回答我的问题。问题是,我知道我必须把包含LAPACK的.lib文件中库目录列表目录(工具 - >选项 - >项目和解决方案 - > VC ++目录 - >库文件),但忘了,我也不得不将其添加到“附加依赖”项目下 - >(项目名称)属性 - >链接 - >输入
其他提示
我有同样的问题,但我解决了如下:
- 从 victor 的网站下载并解压 LAPACK (LIB+DLL) 和 BLASS (LIB+DLL),
- 将 LAPACK 和 BLASS 路径添加到链接器搜索目录,例如 Code::Blocks 中的“项目->构建选项->搜索目录->链接器”,
- 将 lapack_win32.lib 添加到链接器设置,
- 在 [Armadillo PATH]/include/armadillo_bits/config.hpp 中取消注释 `#define ARMA_USE_LAPACK'
不隶属于 StackOverflow