Rcpp:调用c++;来自另一个c++;功能 我在C++中写我的函数在R中使用它们,因为我不想把所有的函数包含在同一个文件中,所以我想调用它们。我将为您提供一个我正在使用的三个文件的简单示例:

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

函数.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 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()为您完成所有工作。