3

こんにちは、README.txtにあるように、Armadillo3.0.1を自分の作業ディレクトリ/home/me/package/armadillo3.0.1/にインストールしました。しかし、例を試してみると:

g ++ -I /home/me/package/armadillo3.0.1/usr/include/ example.cpp -o example -O1

常にエラーが表示されます。

/tmp/ccZAE9pj.o: In function void arma::gemm<false, false, false, false>::apply_blas_type<double>(arma::Mat<double>&, arma::Mat<double> const&, arma::Mat<double> const&, double, double)': example.cpp:(.text._ZN4arma4gemmILb0ELb0ELb0ELb0EE15apply_blas_typeIdEEvRNS_3MatIT_EERKS5_S8_S4_S4_[void arma::gemm<false, false, false, false>::apply_blas_type<double>(arma::Mat<double>&, arma::Mat<double> const&, arma::Mat<double> const&, double, double)]+0x75e): undefined reference towrapper_dgemm_' /tmp/ccZAE9pj.o: In function void arma::glue_times_redirect2_helper<true>::apply<arma::Mat<double>, arma::Mat<double> >(arma::Mat<arma::Mat<double>::elem_type>&, arma::Glue<arma::Mat<double>, arma::Mat<double>, arma::glue_times> const&)': example.cpp:(.text._ZN4arma27glue_times_redirect2_helperILb1EE5applyINS_3MatIdEES4_EEvRNS3_INT_9elem_typeEEERKNS_4GlueIS5_T0_NS_10glue_timesEEE[void arma::glue_times_redirect2_helper<true>::apply<arma::Mat<double>, arma::Mat<double> >(arma::Mat<arma::Mat<double>::elem_type>&, arma::Glue<arma::Mat<double>, arma::Mat<double>, arma::glue_times> const&)]+0xe69): undefined reference towrapper_dgemv_' example.cpp:(.text._ZN4arma27glue_times_redirect2_helperILb1EE5applyINS_3MatIdEES4_EEvRNS3_INT_9elem_typeEEERKNS_4GlueIS5_T0_NS_10glue_timesEEE[void arma::glue_times_redirect2_helper::apply, arma::Mat >(arma:: Mat :: elem_type>&、arma :: Glue、arma :: Mat、arma :: glue_times> const&)] + 0x1175): `wrapper_dgemv_'への未定義の参照collect2:ldが1つの終了ステータスを返しました

ただし、次のような-larmadilloオプションを追加すると、次のようになります。

g ++ example.cpp -o example -O1 -larmadillo

古いバージョンを呼び出すことで機能します。Mat.t()のような3.0.1の新機能を使用したい場合は、次のエラーも表示されます。

example.cpp:関数内'int main(int、char **)':example.cpp:20:エラー:'struct arma::mat'には't'という名前のメンバーがありません</p>

これは、-larmadilloを追加することにより、/ usr / include /armadillo_bits/から古いバージョンのarmadilloを呼び出すことを示しています。

それについて何か考えはありますか?ありがとう。

4

3 に答える 3

2

最初のコマンドでは、libarmadilloとリンクしていません。-L gccオプションを使用してリンクディレクトリを追加することを検討しましたか?例えば:

g ++ -I / home / me / package / armadillo3.0.1 / usr / include / -L / home / me / package / armadillo3.0.1 / usr / lib example.cpp -o example -O1 -larmadillo

于 2012-04-16T04:43:07.203 に答える
2

私もこの問題に遭遇しました。新しいバージョンに干渉する可能性があるため、以前のバージョンのArmadilloをアンインストールして修正しました。

アンインストールは、パッケージマネージャーを介して実行できます。次のコマンド(ターミナルウィンドウ内)を使用して、古いバージョンを手動で削除することもできます。

   rm /usr/include/armadillo
   rm -rf /usr/include/armadillo_bits

上記のコマンドをスーパーユーザー(root)として実行する必要があります。Ubuntuでは、前に「sudo」を付けるだけで十分です。

また、/ usr /lib/または/usr/ lib64 /にある可能性のある古いライブラリファイル、またはこれらの行に沿ったものを削除する必要がある場合もあります。

古いバージョンが削除されたら、cmakeベースのインストールを介して新しいArmadilloを再インストールできます。

于 2012-04-19T11:58:24.420 に答える
0

古いものを削除し、デフォルトのディレクトリに新しいものを再インストールしました。機能した!したがって、古いバージョンを次のようにインストールしたときのようです。

インストールDESTDIR=my / own /dir/を作成します

正しくインストールされませんでした。

したがって、私のような初心者にとっては、デフォルトでインストールする方が理にかなっています。

于 2012-04-20T20:24:45.390 に答える