Rcpp:调用c++;来自另一个c++;功能 我在C++中写我的函数在R中使用它们,因为我不想把所有的函数包含在同一个文件中,所以我想调用它们。我将为您提供一个我正在使用的三个文件的简单示例:
函数.h:Rcpp:调用c++;来自另一个c++;功能 我在C++中写我的函数在R中使用它们,因为我不想把所有的函数包含在同一个文件中,所以我想调用它们。我将为您提供一个我正在使用的三个文件的简单示例:,c++,rcpp,C++,Rcpp,函数.h: #ifndef FUNCTION_H #define FUNCTION_H #include <RcppArmadillo.h> arma::vec quadraticsum(arma::vec x); #endif #include <RcppArmadillo.h> #include <function.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcp
#ifndef FUNCTION_H
#define FUNCTION_H
#include <RcppArmadillo.h>
arma::vec quadraticsum(arma::vec x);
#endif
#include <RcppArmadillo.h>
#include <function.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
using namespace std;
// [[Rcpp::export]]
arma::vec quadraticsum(arma::vec x){
arma::vec results = sum(pow(x,2));
return results;
}
#include <RcppArmadillo.h>
#include <function.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
using namespace std;
// [[Rcpp::export]]
arma::vec sum2(arma::vec x){
arma::vec results = quadraticsum(x)+2;
return results;
}
#ifndef函数
#定义函数
#包括
arma::vec quadraticsum(arma::vec x);
#恩迪夫
函数.cpp:
#ifndef FUNCTION_H
#define FUNCTION_H
#include <RcppArmadillo.h>
arma::vec quadraticsum(arma::vec x);
#endif
#include <RcppArmadillo.h>
#include <function.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
using namespace std;
// [[Rcpp::export]]
arma::vec quadraticsum(arma::vec x){
arma::vec results = sum(pow(x,2));
return results;
}
#include <RcppArmadillo.h>
#include <function.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
using namespace std;
// [[Rcpp::export]]
arma::vec sum2(arma::vec x){
arma::vec results = quadraticsum(x)+2;
return results;
}
#包括
#包括
//[[Rcpp::depends(RcppArmadillo)]]
使用名称空间Rcpp;
使用arma;
使用名称空间std;
//[[Rcpp::导出]]
arma::vec quadraticsum(arma::vec x){
arma::vec结果=总和(功率(x,2));
返回结果;
}
main.cpp:
#ifndef FUNCTION_H
#define FUNCTION_H
#include <RcppArmadillo.h>
arma::vec quadraticsum(arma::vec x);
#endif
#include <RcppArmadillo.h>
#include <function.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
using namespace std;
// [[Rcpp::export]]
arma::vec quadraticsum(arma::vec x){
arma::vec results = sum(pow(x,2));
return results;
}
#include <RcppArmadillo.h>
#include <function.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
using namespace std;
// [[Rcpp::export]]
arma::vec sum2(arma::vec x){
arma::vec results = quadraticsum(x)+2;
return results;
}
#包括
#包括
//[[Rcpp::depends(RcppArmadillo)]]
使用名称空间Rcpp;
使用arma;
使用名称空间std;
//[[Rcpp::导出]]
arma::vec sum2(arma::vec x){
arma::vec结果=二次函数(x)+2;
返回结果;
}
我正在使用Rstudio,当我在main.cpp文件中编写代码时,它识别出函数quadraticsum,因此一切似乎都很好。但是,当我使用命令sourceCpp(“~/main.cpp”)
进行编译时,出现了以下错误:
动态加载错误(“/private/var/folders/46/1tz_54_N3GLFMGFTVQSSPWR0000GN/T/Rtmpdnk9hf/sourceCpp-x86_64-apple-darwin13.4.0-0.12.12/sourceCpp_237a88636e6/sourceCpp_2.so”):
无法加载共享对象“/private/var/folders/46/1tz_54_n3glfmgftvqsspwrr0000gn/T/Rtmpdnk9hf/sourceCpp-x86_64-apple-darwin13.4.0-0.12.12/sourceCpp_237a88636e6/sourceCpp_2.so”:
dlopen(/private/var/folders/46/1tz_54_n3glfmgftvqsspwrr0000gn/T/Rtmpdnk9hf/sourceCpp-x86_64-apple-darwin13.4.0-0.12.12/sourceCpp_237a88636e6/sourceCpp_2.so,6):未找到符号:uu Z12; Z12quadraticsumN4arma3ColIdEE
参考自:/private/var/folders/46/1tz_54_n3glfmgftvqsspwrr0000gn/T/Rtmpdnk9hf/sourceCpp-x86_64-apple-darwin13.4.0-0.12.12/sourceCpp_237a88636e6/sourceCpp_2.so
应为:平面命名空间
在/private/var/folders/46/1tz_54_n3glfmgftvqsspwrr0000gn/T/Rtmpdnk9hf/sourceCpp-x86_64-apple-darwin13.4.0-0.12.12/sourceCpp_237a88636e6/sourceCpp_2.so中
你以前见过这个问题吗?我正在使用macOS 10.12.5。谢谢大家。
sourceCpp
只允许一个源文件
如果要使用多个源文件,则需要构建完整的包
出现此错误是因为第二个源文件尚未编译或链接到共享库中。因此,不存在任何函数实现
您还可以将实现
设置为静态的
或内联的
,然后将它们放在一个标题中,以避免出现完整的包。如果我发现编写#include“function.h”
而不是#include
编译正确。我刚换了。谢谢大家。所以,如果我想修改我的代码,包括<代码>静态<代码> >或代码>内联< /代码>,我能做什么?如果你有几个文件(或者甚至只是几个函数),考虑写一个包。code>Rcpp.package.skeleton()为您完成所有工作。