[英]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.