[英]Error when I call cpp function from another .cpp file
我试图从另一个.cpp文件调用c ++函数。 我使用了.h标头。 见下文我做了什么。
我有一个fh文件:
#ifndef PACKAGENAME_ADD_H
#define PACKAGENAME_ADD_H
#include <Rcpp.h>
Rcpp::NumericVector f(Rcpp::NumericVector x) ;
#endif
f.cpp文件:
#include <Rcpp.h>
using namespace Rcpp;
NumericVector f(NumericVector x) {
return x * 2;
}
g.cpp文件:
#include <Rcpp.h>
#include <f.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector g(NumericVector x) {
return f(x);
}
这三个文件位于同一文件夹中,运行g.cpp时出现此错误:
Rcpp::sourceCpp('~/g.cpp')
dyn.load中的错误(“ /tmp/Rtmpdu4AWp/sourceCpp-x86_64-pc-linux-gnu-0.12.17/sourcecpp_260f5e1a9ebc/sourceCpp_9.so”):无法加载共享对象'/ tmp / Rtmpdu4AWp / sourceCpp-x86_64-pc -linux-gnu-0.12.17 / sourcecpp_260f5e1a9ebc / sourceCpp_9.so':/tmp/Rtmpdu4AWp/sourceCpp-x86_64-pc-linux-gnu-0.12.17/sourcecpp_260f5e1a9ebc/sourceCpp_9.so:未定义的符号:_Z1En14E14R
有人能帮我吗? 我在ubuntu 18.04上工作,我有R 3.4.4版本。
我最熟悉的在Rcpp
处理此问题的Rcpp
是创建一个程序包。 正如Ralf Stubner指出的那样,在您发表在原始帖子中的情况下,这并不是必须的。 将g.cpp
fh
周围的方括号( <>
) g.cpp
为引号( ""
)后,您的代码可以使用sourceCpp()
对我进行编译:
Rcpp::sourceCpp("g.cpp")
g(1:10)
# [1] 2 4 6 8 10 12 14 16 18 20
(有关详细信息,请参见“ Rcpp属性”插图的 1.10节)。
但是,如果最终需要多个.cpp
文件进行编译(即,不仅依赖于另一个实现的文件),那么创建包的方法是。 这听起来可能涉及或令人生畏,但是使用Rcpp
提供的工具,它确实非常简单。 这是我将您的代码转换为软件包的步骤:
Rcpp::Rcpp.package.skeleton("SOanswer", example_code = FALSE)
Read-and-delte-me
。 src/
文件夹中(只需进行一次较小的编辑-将g.cpp
fh
周围的方括号( <>
) g.cpp
为引号( ""
)。 Rcpp::compileAttributes("SOanswer/")
和devtools::install("SOanswer/")
然后它应该可以很好地编译,并且可以从R运行g()
:
SOanswer::g(1:10)
# [1] 2 4 6 8 10 12 14 16 18 20
我要说的是,我将在第0步添加一个内容:在https://cran.r-project.org/package=Rcpp上阅读渐近线,尤其是Rcpp Introduction和Rcpp Package渐近线。 您也可以在注释中查看这个可爱的包示例 ,其中src/
有标头,由coatless提供。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.