为什么在Windows上安装预编译版本的LAPACK时会出现错误?

时间:2021-09-03 19:43:56

I am trying to use the Armadillo matrix library to do matrix calcualtions and it needs BLAS and LAPACK. The Armadillo documentation recommended getting the precompiled versions from http://www.stanford.edu/~vkl/code/libs.html

我试着用犰狳矩阵库来做矩阵的calcualtions,它需要BLAS和LAPACK。Armadillo文档推荐从http://www.stanford.edu/~vkl/code/libs.html获取预编译版本。

There are .lib and .dll files in there. The only problem is I don't know how to get Visual Studio (Express Edition 2008) to recognize these files. I try to copy them to the Visual C++ include and lib directories C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ and C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\, but it doesn't seem to do anything because when I try to compile my program, I get lots of "unresolved external symbol" errors that say it can't find LAPACK functions.

其中有.lib和.dll文件。唯一的问题是我不知道如何让Visual Studio (Express Edition 2008)识别这些文件。我试着将它们复制到Visual c++和lib目录包括C:\Program Files (x86)\Microsoft Visual Studio 9.0 \ VC \ \和C:\Program Files (x86)\Microsoft Visual Studio 9.0 \ VC \ lib \,但它似乎并没有做任何事,因为当我尝试编译程序时,我得到了很多“未解决的外部符号”错误,说找不到LAPACK功能。

EDIT:

编辑:

Here are the error messages:

以下是错误信息:

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", and "ThreeCell3DXT" are classes in my own code. Also in the LAPACK and BLAS files above, there are ".exp files" - what are those and do those have something to do with the problem?

“Cell3DXT”、“TwoCell3DXT”和“ThreeCell3DXT”是我自己代码中的类。在上面的LAPACK和BLAS文件中也有。exp文件“-那些和那些与问题有关系的是什么?

2 个解决方案

#1


2  

I figured out the answer to my problem. The problem was that I knew I had to put the directory containing the LAPACK .lib file in the list of library directories (Tools -> Options -> Projects and Solutions -> VC++ Directories -> Library Files) but forgot that I also had to add it to the "Additional Dependencies" under Project -> (Project Name) Properties -> Linker -> Input.

我找到了问题的答案。问题是,我知道我必须把包含LAPACK lib文件的目录的图书馆目录列表(工具- >选项- >项目和解决方案- > vc++目录- >库文件)但忘了我也不得不将其添加到“附加依赖项”下项目- >属性- >链接器- >(项目名称)的输入。

#2


0  

I had the same problem, but I solved it as follows:

我也遇到过同样的问题,但我的解决方法如下:

  1. download and extract the LAPACK (LIB+DLL) and BLASS (LIB+DLL)from victor's site,
  2. 从victor的站点下载并提取LAPACK (LIB+DLL)和BLASS (LIB+DLL),
  3. Add the LAPACK and BLASS paths to linker search directories for example `Project->Build Options->Search Directories->Linker' in Code::Blocks,
  4. 将LAPACK和BLASS路径添加到链接器搜索目录中,例如“Project->构建选项->搜索目录->链接器”
  5. Add lapack_win32.lib to Linker Settings,
  6. 添加lapack_win32。*链接器设置
  7. Uncomment `#define ARMA_USE_LAPACK' in [Armadillo PATH]/include/armadillo_bits/config.hpp
  8. 在[Armadillo路径]/include/armadillo_bits/config.hpp中定义ARMA_USE_LAPACK

#1


2  

I figured out the answer to my problem. The problem was that I knew I had to put the directory containing the LAPACK .lib file in the list of library directories (Tools -> Options -> Projects and Solutions -> VC++ Directories -> Library Files) but forgot that I also had to add it to the "Additional Dependencies" under Project -> (Project Name) Properties -> Linker -> Input.

我找到了问题的答案。问题是,我知道我必须把包含LAPACK lib文件的目录的图书馆目录列表(工具- >选项- >项目和解决方案- > vc++目录- >库文件)但忘了我也不得不将其添加到“附加依赖项”下项目- >属性- >链接器- >(项目名称)的输入。

#2


0  

I had the same problem, but I solved it as follows:

我也遇到过同样的问题,但我的解决方法如下:

  1. download and extract the LAPACK (LIB+DLL) and BLASS (LIB+DLL)from victor's site,
  2. 从victor的站点下载并提取LAPACK (LIB+DLL)和BLASS (LIB+DLL),
  3. Add the LAPACK and BLASS paths to linker search directories for example `Project->Build Options->Search Directories->Linker' in Code::Blocks,
  4. 将LAPACK和BLASS路径添加到链接器搜索目录中,例如“Project->构建选项->搜索目录->链接器”
  5. Add lapack_win32.lib to Linker Settings,
  6. 添加lapack_win32。*链接器设置
  7. Uncomment `#define ARMA_USE_LAPACK' in [Armadillo PATH]/include/armadillo_bits/config.hpp
  8. 在[Armadillo路径]/include/armadillo_bits/config.hpp中定义ARMA_USE_LAPACK