犰狳安装

Armadillo installation

本文关键字:安装      更新时间:2023-10-16

嗨,我在我自己的工作目录/home/me/package/armadillo3.0.1/中安装了犰狳 3.0.1,正如自述文件所说,.txt说。但是当我尝试一个例子时:

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 to wrapper_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 to wrapper_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_"的引用 收集2:LD 返回 1 个退出状态

但是,如果我添加 -larmadillo 选项,例如:

g++ 示例.cpp -o 示例 -O1 -larmadillo

它通过调用旧版本来工作。如果我想使用 3.0.1 中的新功能,如 Mat.t(),它还会显示错误:

示例.cpp:在函数 'int main(int, char**)' 中: 示例.cpp:20:错误:"结构 arma::mat"没有名为"t"的成员

这表明通过添加 -larmadillo,它从/usr/include/armadillo_bits/调用旧版本的犰狳。

知道吗?谢谢。

在第一个命令中,您没有与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

我也遇到了这个问题。 我已经通过卸载任何以前版本的犰狳来修复它,因为它们会干扰新版本。

卸载可以通过包管理器完成。您也可以通过以下命令手动删除旧版本(在终端窗口中):

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

您需要以超级用户 (root) 身份运行上述命令。 在 Ubuntu 上,用"sudo"开头就足够了。

您可能还需要删除旧的库文件,这些文件可能位于/usr/lib/或/usr/lib64/或类似内容中。

删除旧版本后,您可以通过基于 cmake 的安装重新安装新的犰狳。

我删除了旧的并在默认目录中重新安装了新目录。成功了!所以当我安装旧版本时似乎

使安装 DESTDIR=my/own/dir/

安装不正确。

因此,对于像我这样的新手来说,默认安装更有意义。