在win-builder上使用RcppArmadillo构建R-package时编译错误

时间:2016-12-13 08:39:22

标签: r rcpp armadillo

我在unix平台(Ubuntu 14.04)上使用RcppArmadillo构建了一个R-package。运行R CMD CHECK时,我没有收到任何错误或警告,一切正常。但是,当我尝试通过win-builder构建Windows二进制文件时,我收到以下编译器错误消息:

/local330/lib -LD:/RCompile/recent/R/bin/i386 -lR
LD.o:LD.cpp:(.text+0x598): undefined reference to `ddot_'
LD.o:LD.cpp:(.text+0x8d3): undefined reference to `ddot_'
LD.o:LD.cpp:(.text+0x686b): undefined reference to `ddot_'
LD.o:LD.cpp:(.text+0x6af5): undefined reference to `ddot_'

在文件LD.cpp中,我使用Armadillo函数arma::dot。文件的顶部看起来像

// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::plugins(cpp11)]]
#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace arma;

当尝试在我的同事的Windows-PC上构建时,我得到相同的编译器错误消息。我怀疑链接到LAPACK / BLAS不能正常工作,但我不知道我能做些什么来解决这个问题。

我也使用#include<BH.h>,但这是在不同的文件中。

修改的 我没有makevars或makevars.win文件。

以下是DESCRIPTION文件的相关部分:

Package: ...
Title: ...
Version: 0.0.0
Author: ...
Maintainer: ...
Description: ...
Depends:
    R (>= 3.3.2)
License: GPL-3
LazyData: true
LinkingTo: Rcpp, RcppArmadillo, RcppProgress, BH
Imports:
    Rcpp (>= 0.12.8),
    RcppArmadillo (>= 0.7.500.0.0),
    purrr (>= 0.2.2),
    BH (>= 1.60.0-2),
    stats,
    utils
Suggests:
    knitr,
    testthat,
    rmarkdown,
    magrittr
VignetteBuilder: knitr
RoxygenNote: 5.0.1
SystemRequirements: C++11

这是最有可能导致问题的功能:

arma::mat test(const arma::mat& X) {
  int n = X.n_rows;
  int m = X.n_cols;

  mat Xs(X.memptr(), n, m);
  vec pv = arma::conv_to< vec >::from(mean(Xs));
  for (int j = 0; j < m; j++) {
    double p = pv(j);
    double s = sqrt(p * (1 - p));
    for (int i = 0; i < n; i++) {
      Xs(i, j) = (Xs(i, j) - p) / s;
    }
  }

  mat out(m, m);
  for (int i = 0; i < m - 1; i++) {
    for (int j = i + 1; j < m; j++) {
      double tmp = pow(arma::dot(Xs.col(i), Xs.col(j)) / n, 2);
       out(i, j) = tmp;
       out(j, i) = tmp;
    }
    out(i, i) = pow(arma::dot(Xs.col(i), Xs.col(i)) / n, 2);
  }
  out(m - 1, m - 1) = pow(arma::dot(Xs.col(m - 1), Xs.col(m - 1)) / n, 2);
  return out;
}

0 个答案:

没有答案