gpt4 book ai didi

r - compileAttributes 不会将本地 header 复制到 RcppExports.cpp

转载 作者:行者123 更新时间:2023-12-04 11:37:42 25 4
gpt4 key购买 nike

这是我的R_API.cpp

#include "include/R_GatingSet.hpp" 
#include <Rcpp.h>

Rcpp::List getPopCounts(Rcpp::XPtr<GatingSet> gsPtr, StringVec sampleNames, StringVec subpopulation, bool flowJo, bool isFullPath){
//do stuff
}

这里是 RcppExports.cppcompileAttributes 生成
#include <Rcpp.h>
using namespace Rcpp;

// getPopCounts
Rcpp::List getPopCounts(Rcpp::XPtr<GatingSet> gsPtr, StringVec sampleNames, StringVec subpopulation, bool flowJo, bool isFullPath);
RcppExport SEXP flowWorkspace_getPopCounts(SEXP gsPtrSEXP, SEXP sampleNamesSEXP, SEXP subpopulationSEXP, SEXP flowJoSEXP, SEXP isFullPathSEXP) {
BEGIN_RCPP
SEXP __sexp_result;
{
Rcpp::RNGScope __rngScope;
Rcpp::traits::input_parameter< Rcpp::XPtr<GatingSet> >::type gsPtr(gsPtrSEXP );
Rcpp::traits::input_parameter< StringVec >::type sampleNames(sampleNamesSEXP );
}

显然这会使编译器失败,因为它错过了定义用户类 R_GatingSet.hpp 的本地头包含 ( GatingSet) .
g++ -I/home/wjiang2/R/r-devel/build/include -DNDEBUG -DROUT -Wno-deprecated -I/home/wjiang2/mylib/include/libxml2  -Ibst/ -I/usr/local/include -I"/home/wjiang2/R/r-devel/build/library/Rcpp/include"   -fpic  -g -O2  -c RcppExports.cpp -o RcppExports.o
RcppExports.cpp:9:36: error: ‘GatingSet’ was not declared in this scope

我想知道除了手动将此包含添加回 RcppExports.cpp 之外是否有更好的解决方案?

最佳答案

您应该能够通过使用与您的包同名的头文件来处理这个问题(假设包是 flowWorkspace ):

inst/include/flowWorkspace.h
compileAttributes将在 RcppExports.cpp 中包含该头文件,并且您可以在其中包含其他导出机制工作所需的类的定义。

编辑:您也可以尝试使用 // [[Rcpp::interfaces(r, cpp)]]属性来为你自动生成这些接口(interface)(虽然我没有这么玩过),但它在 Rcpp Attributes vignette 中进行了讨论——见 3.5.1。

关于r - compileAttributes 不会将本地 header 复制到 RcppExports.cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com