Windows にプリコンパイル済みバージョンの LAPACK をインストールするとエラーが発生するのはなぜですか?
-
22-09-2019 - |
質問
Armadillo 行列ライブラリを使用して行列計算を行おうとしていますが、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 ++ディレクトリ - [ツール]> [ライブラリファイル)入れていた知っていたということでしたが、私はまたに持っていたことを忘れてしまいました>(プロジェクト名)のプロパティ - - >リンカ - >入力
プロジェクトの下の「追加の依存」に追加他のヒント
私も同じ問題を抱えていましたが、次のように解決しました。
- ビクターのサイトから LAPACK (LIB+DLL) と BLASS (LIB+DLL) をダウンロードして解凍します。
- LAPACK パスと BLASS パスをリンカー検索ディレクトリに追加します。たとえば、Code::Blocks の「Project->Build Options->Search Directory->Linker」です。
- lapack_win32.lib をリンカー設定に追加します。
- [Armadillo PATH]/include/armadillo_bits/config.hpp の `#define ARMA_USE_LAPACK' のコメントを解除します