3

行列計算を行うために 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>リンク中...  
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: 未解決の外部シンボル _zgetrf_ が関数で参照されています "void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)" (??$ getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)  
1>ThreeCell3DXT.obj: エラー LNK2001: 未解決の外部シンボル _zgetrf_  
1>Cell3DXT.obj: エラー LNK2019: 未解決の外部シンボル _cgetrf_ が関数で参照されています "void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)" (??$ getrf_@N@lapack@arma@@YAXPAH0PAN000@Z)  
1>ThreeCell3DXT.obj: エラー LNK2001: 未解決の外部シンボル _cgetrf_  
1>Cell3DXT.obj: エラー LNK2019: 関数 "void __cdecl arma::lapack::getrf_(int *,int *,double *,int *,int *,int *)" で参照されている未解決の外部シンボル _dgetrf_ (??$ 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: 未解決の外部シンボル _dgemm_ が関数で参照されています "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: 未解決の外部シンボル _sgemm_ が関数で参照されています "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: 未解決の外部シンボル _zgetri_ が関数で参照されています "void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)" ( ??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
1>ThreeCell3DXT.obj: エラー LNK2001: 未解決の外部シンボル _zgetri_  
1>Cell3DXT.obj : エラー LNK2019: 未解決の外部シンボル _cgetri_ が関数で参照されています "void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)" ( ??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
1>ThreeCell3DXT.obj: エラー LNK2001: 未解決の外部シンボル _cgetri_  
1>Cell3DXT.obj : エラー LNK2019: 未解決の外部シンボル _dgetri_ が関数で参照されています "void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)" ( ??$getri_@N@lapack@arma@@YAXPAHPAN00100@Z)  
1>ThreeCell3DXT.obj: エラー LNK2001: 未解決の外部シンボル _dgetri_  
1>Cell3DXT.obj : エラー LNK2019: 未解決の外部シンボル _sgetri_ が関数で参照されています "void __cdecl arma::lapack::getri_(int *,double *,int *,int *,double *,int *,int *)" ( ??$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: 未解決の外部シンボル _sgesvd_ が関数で参照されています "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 の未解決の外部  
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. LAPACK (LIB+DLL) と BLASS (LIB+DLL) を victor のサイトからダウンロードして抽出し、
  2. LAPACK および BLASS パスをリンカ検索ディレクトリに追加します。
  3. リンカー設定に lapack_win32.lib を追加し、
  4. [Armadillo PATH]/include/armadillo_bits/config.hpp の `#define ARMA_USE_LAPACK' のコメントを外します。
于 2010-07-08T12:29:53.930 に答える