【问题标题】:Armadillo installation犰狳安装
【发布时间】:2012-04-27 10:22:11
【问题描述】:

您好,正如 README.txt 所述,我在自己的工作目录 /home/me/package/armadillo3.0.1/ 中安装了 Armadillo3.0.1。但是当我尝试一个例子时:

g++ -I /home/me/package/armadillo3.0.1/usr/include/example.cpp -o example -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 towrapper_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 towrapper_dgemv_' example.cpp :(。text._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> 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”的成员

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

你知道吗?谢谢。

【问题讨论】:

    标签: c++ g++ installation armadillo


    【解决方案1】:

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

    【讨论】:

    • 谢谢,看来可行。现在它不会打印出神秘的错误,而只会抱怨找不到 libmkl.so。
    • 对于 libmkl,您可能需要类似的 -L 和 -l。
    • 我遇到了类似的问题。我在没有 root 权限的情况下安装了犰狳,我想我需要告诉 g++ 头文件和库在哪里。因此,我做了以下事情:g++ -std=c++0x example.cpp -o example -O2 -I/my_directory/armadillo-9.100.5/include -L/my_directory/armadillo-9.100.5/libarmadillo。 so.9.100.5 -lblas -llapack 现在,由于某种原因,我不明白如果我添加 -larmadillo 选项以包含运行时库,我会收到一条错误消息,提示找不到 -larmadillo。有什么想法可能是错的吗?提前致谢!
    【解决方案2】:

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

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

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

    您需要以超级用户 (root) 身份运行上述命令。在 Ubuntu 上,在它们前面加上“sudo”就足够了。

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

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

    【讨论】:

      【解决方案3】:

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

      make install DESTDIR=my/own/dir/

      安装不正确。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        相关资源
        最近更新 更多