基于本教程 - 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无法链接其余的头文件。
我该如何解决?
答案 0 :(得分:3)
这与Rcpp无关(我们还提供 ample 文档,关于单独使用,在包中,通过内联,...)。
您似乎使用JSON解析功能,但显然没有链接到与您包含的标头json/json.h
对应的JSON解析器库。
除了这个问题在代码示例中不完整且因此不可重现之外,我在这里看到两个问题:
答案 1 :(得分:0)
以下是我如何解决问题,运行代码我必须添加-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 storage.cpp -o storage.o g ++ -shared -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标志来完成。