Rcpp:从另一个c ++函数调用c ++函数时出错

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

我正在用C ++编写我的函数以在R中使用它们。因为我不想在同一个文件中包含所有函数,所以我想调用它们。我将给你一个我正在使用的三个文件的简单示例:

function.h:

#ifndef FUNCTION_H    
#define FUNCTION_H

#include <RcppArmadillo.h>

arma::vec quadraticsum(arma::vec x);

#endif

function.cpp:

 #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;
}

main.cpp中:

#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;
}

我正在使用Rstudio,当我在main.cpp文件中编写代码时,它识别出函数quadraticsum,所以一切似乎都很好。但是,当我使用命令sourceCpp("~/main.cpp")编译时,我收到此错误:

dyn.load中的错误(“/ 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':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):找不到符号:__ 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中的平面命名空间0.12 / sourcecpp_237a88636e6 / sourceCpp_2.so

你以前见过这个问题吗?我正在使用macOS 10.12.5。谢谢你们。

c++ rcpp
2个回答
3
投票

sourceCpp只允许单个源文件。

如果要使用多个源文件,则需要构建完整的包。

出现错误是因为第二个源文件尚未编译或链接到共享库中。因此,不存在任何功能实现。

您还可以将实现staticinline,然后将它们放在标题中,您要避免使用完整的包。如果


0
投票

我发现写#include "function.h"而不是#include <function.h>它正确编译。我刚改变了谢谢你们。

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