犰狳安装(Armadillo installation)

2019-09-16 13:38发布

您好我在我自己的工作目录/home/me/package/armadillo3.0.1/安装Armadillo3.0.1作为的README.txt说。 但是,当我尝试的例子:

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

它始终显示错误:

/tmp/ccZAE9pj.o:在功能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:在功能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 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 :(文本。 _ZN4arma27glue_times_redirect2_helperILb1EE5applyINS_3MatIdEES4_EEvRNS3_INT_9elem_typeEEERKNS_4GlueIS5_T0_NS_10glue_timesEEE [空隙ARMA :: glue_times_redirect2_helper ::申请,ARMA ::垫>(ARMA ::垫:: elem_type>&,ARMA ::胶,ARMA ::垫,ARMA :: glue_times>常量&)] + 0x1175):未定义参考`wrapper_dgemv_” collect2:LD返回1个退出状态

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

克++ example.cpp -o例如-O1 -larmadillo

它通过调用旧版本。 如果我想在3.0.1像Mat.t()使用的新功能,它也将显示错误:

example.cpp:在函数 'INT主(INT,字符**)':example.cpp:20:错误: '结构ARMA ::垫' 没有名为 'T' 部件

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

任何想法的呢? 谢谢。

Answer 1:

在第一个命令,你是不是有libarmadillo链接。 你有没有考虑使用-L GCC选项添加一个链接目录? 例如:

克++ -I /家/ ME /包/ armadillo3.0.1的/ usr /包括/ -L /家/ ME /包/ armadillo3.0.1 / usr / lib中example.cpp -o例如-O1 -larmadillo



Answer 2:

我也碰到这个问题。 我已经卸载犰狳以前的所有版本修复它,因为他们可以用新的版本干扰。

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

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

你需要运行上述命令,超级用户(root)。 在Ubuntu上它应该是足够的前面加上与“命令”。

您可能还需要删除旧的库文件,这可能是在/ usr / lib中/或/ usr / lib64目录/,或沿着这些路线的东西。

一旦旧版本已被删除,您可以重新安装新的犰狳,通过cmake的基础设施。



Answer 3:

我删除了旧的和重新安装在默认目录下新建一个。 有效! 如此看来,当我安装了旧版本:

使安装DESTDIR =我/自己/ DIR /

这是正确安装。

因此,对于像我这样的新手,安装在默认情况下会更有意义。



文章来源: Armadillo installation