编译犰狳时出错

Posted

技术标签:

【中文标题】编译犰狳时出错【英文标题】:Error Compiling Armadillo 【发布时间】:2016-12-24 01:21:06 【问题描述】:

我在尝试编译犰狳时遇到以下错误:

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 编译的不同类。其中两个使用犰狳:第一个没有任何问题。相反,这个新类给了我编译错误。我发现这里的错误是使用犰狳的cor 函数给出的。当我在第一堂课中只使用 rowvec 或 cx_rowvec 时,一切都很完美。调试我注意到,当我用cor 取消注释行代码时,我得到了错误。有人能帮我吗?我安装了最后一个犰狳版本 7.600.2。

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

【问题讨论】:

What is an undefined reference/unresolved external symbol error and how do I fix it?的可能重复 查看犰狳Frequently Asked Questions页面的“链接”部分。 【参考方案1】:

我解决了在 armadillo_bits/config.hpp 中注释以下行的问题: #define ARMA_USE_LAPACK#define ARMA_USE_BLAS。 即使它有效,它也是错误的解决方案。此处的链接部分描述了更好的解决方案http://arma.sourceforge.net/faq.html#linking。

【讨论】:

这是错误的。更好的解决方案在犰狳Frequently Asked Questions 页面的“链接”部分中描述。

以上是关于编译犰狳时出错的主要内容,如果未能解决你的问题,请参考以下文章

犰狳:乘法时出错

在 ubuntu16.04 上生成运行时犰狳库时出错

使用 carma(犰狳矩阵和 numpy 数组)用 pybind11 包装 c++ 类时出错

编译cm11出错

ARM (UBOOT)编译出错问题

DataStage Transformer 编译出错