编译犰狳时遇到错误

时间:2016-12-24 01:21:07

标签: c++ armadillo

尝试编译Armadillo时出现以下错误:

Undefined symbols for architecture x86_64:
  "_wrapper_ddot_", referenced from:
      void arma::syrk_vec<true, false, false>::apply<double, arma::Mat<double> >(arma::Mat<double>&, arma::Mat<double> const&, double, double) in exampleArma.o
      void arma::syrk_vec<true, false, false>::apply<double, arma::Row<double> >(arma::Mat<double>&, arma::Row<double> const&, double, double) in exampleArma.o
  "_wrapper_dgemm_", referenced from:
      void arma::gemm<true, false, false, false>::apply_blas_type<double, arma::Mat<double>, arma::Mat<double> >(arma::Mat<double>&, arma::Mat<double> const&, arma::Mat<double> const&, double, double) in exampleArma.o
      void arma::gemm<true, false, false, false>::apply_blas_type<double, arma::Row<double>, arma::Row<double> >(arma::Mat<double>&, arma::Row<double> const&, arma::Row<double> const&, double, double) in exampleArma.o
  "_wrapper_dgemv_", referenced from:
      void arma::glue_times::apply<double, true, false, false, arma::Mat<double>, arma::Mat<double> >(arma::Mat<double>&, arma::Mat<double> const&, arma::Mat<double> const&, double) in exampleArma.o
      void arma::glue_times::apply<double, true, false, false, arma::Row<double>, arma::Row<double> >(arma::Mat<double>&, arma::Row<double> const&, arma::Row<double> const&, double) in exampleArma.o
  "_wrapper_dsyrk_", referenced from:
      void arma::syrk<true, false, false>::apply_blas_type<double, arma::Mat<double> >(arma::Mat<double>&, arma::Mat<double> const&, double, double) in exampleArma.o
      void arma::syrk<true, false, false>::apply_blas_type<double, arma::Row<double> >(arma::Mat<double>&, arma::Row<double> const&, double, double) in exampleArma.o

我正在使用makefile进行编译,我已经尝试过这里找到的解决方案但效果不佳。到目前为止,我的项目有不同的类,用makefile编译。其中两个使用犰狳:第一个没有显示任何问题。相反,这个新类给了我编译错误。我发现这里的错误是使用armadillo的cor函数给出的。当我在第一堂课中使用rowvec或cx_rowvec时,一切都很完美。调试我注意到当我用cor取消注释行代码时,我得到了错误。有人能帮我吗?我安装了最后一个armadillo版本7.600.2。

现在我尝试使用不同的Armadillo库函数:听起来我没有其中一些。例如,使用以下函数mean(X),var(X),stddev(X)我没有任何问题,它可以完美地编译。相反,当我尝试使用像cov(X), cor(X)这样的其他函数时,我会得到错误。我想我不会在我的图书馆里有这些功能。所以为了解决这个问题,我试图安全地删除旧库并安装一个新库。不幸的是错误仍然存​​在我希望这次更新会有所帮助。我不认为我在makefile中犯了一些错误,因为当我在代码中使用某些特定功能时,它编译得不好。 谢谢大家!

1 个答案:

答案 0 :(得分:1)

我解决了对armadillo_bits / config.hpp中以下几行的评论: #define ARMA_USE_LAPACK#define ARMA_USE_BLAS。 即使它有效,也是错误的解决方案。这里的链接部分http://arma.sourceforge.net/faq.html#linking中描述了一个更好的解决方案。