繁体   English   中英

无法链接Rcpp的cpp文件中的依赖头文件

[英]Not able to link dependent header files in cpp file for Rcpp

基于本教程-http: //www.r-bloggers.com/using-r-callling-c-code-with-rcpp/我试图从R调用C函数。C代码具有以下依赖性,编译C代码后完美工作

#include <json/json.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include <time.h>
#include <math.h>
#include <Rcpp.h>

现在,当我尝试加载so文件时,我看到以下错误。

dyn.load("storage.so")
Error in dyn.load("storage.so") : 
unable to load shared object '/home/algotree/Rcode/storage.so':
/home/algotree/Rcode/storage.so: undefined symbol: json_object_array_length

似乎R无法链接头文件的其余部分。

我该如何解决?

这与Rcpp无关 (为此,我们也提供了大量关于如何单独使用,通过内联,...打包使用的文档)。

您似乎使用了JSON解析功能,但是显然没有链接到与您包含的标头json/json.h对应的JSON解析器库。

除了这个问题在其代码示例中不完整且因此不可复制之外,我在这里看到两个问题:

  1. 使用库学习有关C / C ++程序的知识,以及

  2. 将其应用于R上下文。

在基于标头使用JSON和Curl时,您可以(并且应该)研究相应的包,例如RJSONIORCurl

如果您知道发生了什么并了解其机制,则可以使用Rcpp提供您正在寻找的新功能。 但是,仅通过将Rcpp投入使用,这些问题就无法解决。 您需要了解如何在头文件和链接库中使用。

这是我解决问题的方法,为了运行代码,我必须在命令链接中添加-lcurl和-ljson。 因此,命令R CMD SHLIB应该执行的是以下命令

g ++ -I / usr / share / R / include -DNDEBUG -I / usr / local / lib / R / site-library / Rcpp / include -I / usr / include / -fpic -O3 -pipe -g -c存储。 cpp -o storage.o g ++-共享-o storage.so storage.o -L / usr / lib -L ​​/ usr / local / lib / R / site-library / Rcpp / lib -lRcpp -Wl-rpath / usr / local / lib / R / site-library / Rcpp / lib -L ​​/ usr / lib64 / R / lib -lcurl -ljson -lR

这可以通过编辑PKG_LIBS标志来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM