3

我正在尝试使用犰狳矩阵库来进行矩阵计算,它需要 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>链接...  
1>LINK : 警告 LNK4076: 无效的增量状态文件 'C:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\Debug\TentPitcher.ilk'; 非增量链接  
1> 创建库 C:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\Debug\TentPitcher.lib 和对象 C:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\Debug\TentPitcher.exp  
1>Cell3DXT.obj:错误 LNK2019:函数“void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)”中引用的未解析外部符号 _zgetrf_ (??$ getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)  
1>ThreeCell3DXT.obj:错误LNK2001:无法解析的外部符号_zgetrf_  
1>Cell3DXT.obj:错误 LNK2019:函数“void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)”中引用的未解析外部符号 _cgetrf_ (??$ getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)  
1>ThreeCell3DXT.obj:错误LNK2001:无法解析的外部符号_cgetrf_  
1>Cell3DXT.obj:错误 LNK2019:未解析的外部符号 _dgetrf_ 在函数“void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)”中引用 (??$ getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)
1>ThreeCell3DXT.obj:错误LNK2001:无法解析的外部符号_dgetrf_
1>Cell3DXT.obj:错误 LNK2019:函数“void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)”中引用的未解析外部符号 _sgetrf_ (??$ getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)
1>ThreeCell3DXT.obj:错误LNK2001:无法解析的外部符号_sgetrf_
1>Cell3DXT.obj:错误 LNK2019:未解析的外部符号 _zgemv_ 在函数“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:错误LNK2001:无法解析的外部符号_zgemv_
1>TwoCell3DXT.obj : 错误 LNK2001: 无法解析的外部符号 _zgemv_
1>Cell3DXT.obj:错误 LNK2019:未解析的外部符号 _cgemv_ 在函数“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:错误LNK2001:无法解析的外部符号_cgemv_
1>TwoCell3DXT.obj:错误 LNK2001:无法解析的外部符号 _cgemv_
1>Cell3DXT.obj:错误 LNK2019:未解析的外部符号 _dgemv_ 在函数“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:错误 LNK2001:无法解析的外部符号 _dgemv_
1>TwoCell3DXT.obj:错误 LNK2001:无法解析的外部符号 _dgemv_
1>Cell3DXT.obj:错误 LNK2019:未解析的外部符号 _sgemv_ 在函数“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:错误LNK2001:无法解析的外部符号_sgemv_
1>TwoCell3DXT.obj:错误 LNK2001:无法解析的外部符号 _sgemv_
1>Cell3DXT.obj:错误 LNK2019:未解析的外部符号 _zgemm_ 在函数“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:错误LNK2001:无法解析的外部符号_zgemm_  
1>TwoCell3DXT.obj : 错误 LNK2001: 无法解析的外部符号 _zgemm_  
1>Cell3DXT.obj:错误 LNK2019:未解析的外部符号 _cgemm_ 在函数“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:错误LNK2001:无法解析的外部符号_cgemm_  
1>TwoCell3DXT.obj:错误 LNK2001:无法解析的外部符号 _cgemm_  
1>Cell3DXT.obj : 错误 LNK2019: 函数 "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:错误LNK2001:无法解析的外部符号_dgemm_  
1>TwoCell3DXT.obj:错误 LNK2001:无法解析的外部符号 _dgemm_  
1>Cell3DXT.obj : 错误 LNK2019: 函数 "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:错误LNK2001:无法解析的外部符号_sgemm_  
1>TwoCell3DXT.obj:错误 LNK2001:无法解析的外部符号 _sgemm_  
1>Cell3DXT.obj:错误LNK2019:函数“void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)”中引用的未解析外部符号_zgetri_( ??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
1>ThreeCell3DXT.obj:错误LNK2001:无法解析的外部符号_zgetri_  
1>Cell3DXT.obj:错误LNK2019:函数“void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)”中引用的未解析外部符号_cgetri_( ??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
1>ThreeCell3DXT.obj:错误LNK2001:无法解析的外部符号_cgetri_  
1>Cell3DXT.obj:错误LNK2019:函数“void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)”中引用的未解析外部符号_dgetri_( ??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
1>ThreeCell3DXT.obj:错误LNK2001:无法解析的外部符号_dgetri_  
1>Cell3DXT.obj:错误 LNK2019:函数“void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)”中引用的未解析外部符号 _sgetri_ ( ??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
1>ThreeCell3DXT.obj:错误LNK2001:无法解析的外部符号_sgetri_  
1>TwoCell3DXT.obj:错误 LNK2019:未解析的外部符号 _dgesvd_ 在函数“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:错误 LNK2019:函数“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 : 致命错误 LNK1120: 18 unresolved externals  
1>构建日志保存在“file://c:\Users\User\Documents\Visual Studio 2008\Projects\TentPitcher\TentPitcher\Debug\BuildLog.htm”  
1>TentPitcher - 43 个错误,1 个警告

Cell3DXT”、“ TwoCell3DXT”和“ ThreeCell3DXT”是我自己代码中的类。同样在上面的 LAPACK 和 BLAS 文件中,还有“.exp 文件”——它们是什么,它们与问题有关吗?

4

2 回答 2

2

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

于 2010-02-24T22:01:56.337 回答
0

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

  1. 从 victor 的网站下载并提取 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'
于 2010-07-08T12:29:53.930 回答