gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:21:51 25 4
gpt4 key购买 nike

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

函数.h:

#ifndef FUNCTION_H    
#define FUNCTION_H

#include <RcppArmadillo.h>

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

#endif

函数.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;
}

ma​​in.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,当我在 ma​​in.cpp 文件中编写代码时,它识别函数 quadraticsum,因此一切似乎都很好。但是,当我使用命令 sourceCpp("~/main.cpp") 进行编译时,我得到了这个错误:

Error in 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") : unable to load shared object '/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): Symbol not found: __Z12quadraticsumN4arma3ColIdEE Referenced from: /private/var/folders/46/1tz_54_n3glfmgftvqsspwrr0000gn/T/Rtmpdnk9hf/sourceCpp-x86_64-apple-darwin13.4.0-0.12.12/sourcecpp_237a88636e6/sourceCpp_2.so Expected in: flat namespace in /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 只允许一个源文件。

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

出现这个错误是因为第二个源文件还没有编译或者链接到共享库中。因此,不存在函数实现。

您还可以将实现设为staticinline,然后将它们放在 header 中,以免出现完整的包。如果

关于c++ - Rcpp:从另一个 C++ 函数调用 C++ 函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47886664/

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