R中挪用C++
原来想用谁人rJava来的,溘然发明java险些都忘了,照旧用R挪用C++吧
事先说明,下面的操纵都是在ubuntu下举办的,windows下应该也可以,前提是R CMD东西完整安装,推荐用gcc,Visual Studio理论上说也完全可以。不外windows下的问题就没步伐回覆列位了,因为我也不会。
下面是从R官方文章之一的Writing R Extension中摘录和转译的:
首先,凭据一般思路写C++代码,这个是X.h文件
//X.h
class X {
public: X (); ~X ();
};
class Y {
public: Y (); ~Y ();
}
这个是X.cpp文件,留意谁人R.h的头文件,R里挪用就靠这个的
//X.cpp
#include <R.h>
#include “X.h”
static Y y;
X::X() { REprintf(“constructor X\n”); }
X::~X() { REprintf(“destructor X\n”); }
Y::Y() { REprintf(“constructor Y\n”); }
Y::~Y() { REprintf(“destructor Y\n”); }
最后是X_main.cpp文件,其实就是用extern C{}把主函数包起来了,这样才答允外部挪用吧
//X_main.cpp
#include “X.h”
extern “C” {
void X_main () {
X x;
}
} // extern “C
之后在terminal里运行“R CMD SHLIB X.cpp X_main.cpp”,之后会生成.o可执行文件和.so共享库,如下图所示:
筹备停当,在R里挪用这个玩意吧!功效如下:
> dyn.load(paste(“X”, .Platform$dynlib.ext, sep = “”))
constructor Y
> .C(“X_main”)
constructor X
destructor X
list()
R> q()
Save workspace image? [y/n/c]: y
destructor Y
PS:Linux下默认用g++,那么在windows下用visual studio生成一个dll库,应该也可以实现R挪用,不外dll很头痛,当年没有好勤学