包括Rcpp.h时未定义引用错误(Undefined reference errors when i

2019-10-19 19:52发布

我使用64位的Ubuntu,我试图写C ++。

我发现,如果我使用#include <Rcpp.h>我甚至都不需要调用任何函数在R命名空间,我就已经收到undefired引用错误:

obj/x.o: In function `Rcpp::Rstreambuf<true>::xsputn(char const*, long)':
/usr/local/lib/R/site-library/Rcpp/include/Rcpp/iostream/Rstreambuf.h:61: undefined reference to `Rprintf'
obj/x.o: In function `Rcpp::Rstreambuf<false>::xsputn(char const*, long)':
/usr/local/lib/R/site-library/Rcpp/include/Rcpp/iostream/Rstreambuf.h:65: undefined reference to `REprintf'
obj/x.o: In function `Rcpp::Rstreambuf<true>::overflow(int)':
/usr/local/lib/R/site-library/Rcpp/include/Rcpp/iostream/Rstreambuf.h:70: undefined reference to `Rprintf'
obj/x.o: In function `Rcpp::Rstreambuf<false>::overflow(int)':
/usr/local/lib/R/site-library/Rcpp/include/Rcpp/iostream/Rstreambuf.h:74: undefined reference to `REprintf'
obj/x.o: In function `Rcpp::Rstreambuf<true>::sync()':
/usr/local/lib/R/site-library/Rcpp/include/Rcpp/iostream/Rstreambuf.h:79: undefined reference to `R_FlushConsole'
obj/x.o: In function `Rcpp::Rstreambuf<false>::sync()':
/usr/local/lib/R/site-library/Rcpp/include/Rcpp/iostream/Rstreambuf.h:83: undefined reference to `R_FlushConsole'

我已经安装了R基本和R基本开发。 我安装RCPP通过运行R作为根,做了install.package("Rcpp")

我编译使用克++与C ++程序-I/usr/local/lib/R/site-library/Rcpp/include

我缺少的是在这里吗? 感谢您的任何答复。

Answer 1:

只需拔Rcpp头是不够的。 你还必须具备r标题和链接反对研究的图书馆。 您可以使用如R CMD SHLIB为你做到这一点。

不过,我建议你可以:

  • 创建一个具有包LinkingTo: Rcpp等...(见RCPP的文档)。
  • 使用sourceCpp.cpp文件。 见?sourceCpp


Answer 2:

正如罗曼·弗朗索瓦指出,你不能只是有头(声明),你还需要落实。

我的建议是要产生一个.so对象一个Makefile。 将R CMD SHLIB命令是一个很好的起点找出所需要的标志,但它不能处理设计Matlab的以外的地方执行的功能。

然后,你需要找到Rcpp.so和libR.so,并连接两者在你的G ++调用。

所以,是有希望的“使用R R之外” - 在我的情况,我是能够编译从VineCopula包一些东西成一个.so文件Matlab的是能够读取。

请参阅下面我的Makefile文件(只是为例):

CFLAGS=-I/usr/share/R/include/ -I/usr/local/lib/R/site-library/Rcpp/include/ -I/usr/local/lib/R/site-library/VineCopula/include -dynamiclib -Wl,-headerpad_max_install_names -shared -L/usr/lib/R/lib -lR 
CFLAGS2=-I/usr/share/R/include/ -I/usr/local/lib/R/site-library/Rcpp/include/ -I/usr/local/lib/R/site-library/VineCopula/include 
LDFLAGS=-DNDEBUG -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g

all: RVinePDF.so

RVinePDF.so: RVinePDF.o Rcpp.so libR.so
  g++ $(CFLAGS) -o RVinePDF.so RVinePDF.o Rcpp.so libR.so $(LDFLAGS) 
  \rm *.o 

RVinePDF.o: RVinePDF.cpp 
  g++ $(CFLAGS2) -o RVinePDF.o -c RVinePDF.cpp $(LDFLAGS)

[other .o files defined similarly]


文章来源: Undefined reference errors when including Rcpp.h