无法在 Windows 上使用 RcppParallel 进行编译

问题描述 投票:0回答:1

我已经安装了Rcpp,RcppParallel,我正在测试简单的功能,写在.cpp文件中。

#include <RcppParallel.h>
#include <Rcpp.h>
#include <vector>

using namespace RcppParallel;
using namespace Rcpp;

struct Sum : public Worker {
  // Source vector
  const std::vector<int> &input;

  // Accumulated value
  int value;

  // Constructor
  Sum(const std::vector<int> &input) : input(input), value(0) {}

  // Split constructor
  Sum(const Sum &sum, Split) : input(sum.input), value(0) {}

  // Accumulate values in the given range
  void operator()(std::size_t begin, std::size_t end) {
    value += std::accumulate(input.begin() + begin, input.begin() + end, 0);
  }

  // Join the accumulated values
  void join(const Sum &rhs) {
    value += rhs.value;
  }
};

// [[Rcpp::export]]
int parallelSum(const std::vector<int> &x) {
  Sum sum(x);

  // Call parallelReduce to start the work
  parallelReduce(0, x.size(), sum);

  return sum.value;
}

然后:

sourceCpp("UntitledCPP.cpp")

它给了我:

sourceCpp("UntitledCPP.cpp")
using C++ compiler: 'G__~1.EXE (GCC) 13.2.0'
g++ -std=gnu++17  -I"C:/PROGRA~1/R/R-44~1.1/include" -DNDEBUG   -I"C:/Users/callimae/AppData/Local/R/win-library/4.3/Rcpp/include" -I"C:/Users/callimae/Documents/Projects/NewEM_conjugate_base"   -I"C:/rtools44/x86_64-w64-mingw32.static.posix/include"     -O2 -Wall  -mfpmath=sse -msse2 -mstackrealign  -c UntitledCPP.cpp -o UntitledCPP.o
UntitledCPP.cpp:1:10: fatal error: RcppParallel.h: No such file or directory
    1 | #include <RcppParallel.h>
      |          ^~~~~~~~~~~~~~~~
compilation terminated.
make: *** [C:/PROGRA~1/R/R-44~1.1/etc/x64/Makeconf:296: UntitledCPP.o] Error 1
Error in sourceCpp("UntitledCPP.cpp") : 
  Error 1 occurred building shared library.

虽然我指定了 RcppParallel 的完整路径,但它却询问了tinythread。

我有新版本的 R 和 Rtools。我的会议信息:

sessionInfo()
R version 4.4.1 (2024-06-14 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 22631)

Matrix products: default


locale:
[1] LC_COLLATE=Polish_Poland.utf8  LC_CTYPE=Polish_Poland.utf8    LC_MONETARY=Polish_Poland.utf8 LC_NUMERIC=C                  
[5] LC_TIME=Polish_Poland.utf8    

time zone: Europe/Warsaw
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RcppArmadillo_14.0.0-1 RcppParallel_5.1.8     Rcpp_1.0.12           

loaded via a namespace (and not attached):
 [1] compiler_4.4.1    magrittr_2.0.3    cli_3.6.3         tools_4.4.1       fs_1.6.4          glue_1.7.0        rstudioapi_0.16.0 vctrs_0.6.5      
 [9] usethis_2.2.3     lifecycle_1.0.4   rlang_1.1.4       purrr_1.0.2      

我也重新安装了所有 rcpp 软件包。 你有什么想法吗?

亲切的问候,

马特乌斯

r rcpp rcppparallel
1个回答
0
投票

您没有告诉

sourceCpp()
您的代码依赖于
RcppParallel
,因此由于不包含相应的标头而无法编译。 (然后将无法通过不链接来构建。)

修复方法很简单,例如在这篇关于 RcppParallel 的 Rcpp Gallery 文章中进行了解释:您需要添加一行

// [[Rcpp::depends(RcppParallel)]]
到您的源文件,之后它应该可以工作(如果没有其他问题)。

您可能想尝试其他更简单的案例,例如 Rcpp Gallery 帖子中的案例,以确保您实际上可以针对

RcppParallel

 进行构建。

© www.soinside.com 2019 - 2024. All rights reserved.