首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与外部标头和库同步Rcpp以构建批处理地理编码包

与外部标头和库同步Rcpp以构建批处理地理编码包
EN

Stack Overflow用户
提问于 2016-04-28 23:28:46
回答 2查看 912关注 0票数 1

晚上好。

目标:我正在尝试构建一个基于纽约市城市规划部Geosupport软件的批处理地理编码包,使用运行RStudio的机器上的RCPP。除坐标外,Geosupport还返回了许多有用的信息,包括建筑物、识别号和人口普查地理信息。我认为,这样一套方案对研究人员和社区倡导者使用纽约的数据有很大的帮助。

背景: Geosupport可以在NYC网站上免费下载。下载附带了一个批处理地理编码接口(称为GBAT)。此外,还提供了头文件、数据文件和库文件,以便用户可以从使用C、C++或VB构建的应用程序中进行地理编码。库文件有一个DLL扩展名,是用C编译的(不是C++,我与其中一个开发人员进行了检查)。

状态:到目前为止,我已经能够包括头文件和设置工作区。当我尝试使用C库中的函数时,会遇到问题。我一直在阅读写R扩展-使用Makevars,但我仍然不确定如何进行。我用RCPP使用RStudio的Rtools构建了我的包,并且没有生成makevars文件。我买了德克的书(在类似我的帖子中提到过),但它还没有到。

谢谢!

格雷琴

更新的代码..。2016年3月19日,美国东部时间19:45 :根据无外套的建议,我创建了一个GitHub存储库。我还创建了一个Makevars.win和Makevars文件,并将头文件重新定位到inst/include。标题工作正常,但我仍然不知道如何处理库。此外,驱动地理编码器的底层数据文件对于GitHub (1.85GB)来说太大了。我将尝试在我的家庭计算机上使用Git添加它们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-29 01:16:59

没有书?没问题!

首先,尝试通过Rcpp.package.skeleton()创建包框架或使用RStudio的Create an Rcpp Package位来理解包结构。

对于其他一切,在小插曲Rcpp画廊中都有很多例子。

首先,困难的主要原因是使用:

代码语言:javascript
复制
#include "../Include/NYCgeo.h"

这不是一个很好的风格,因为它与典型的R包的文件结构背道而驰。

当尝试使用库标头时,应该选择以下两种类型的包结构:

代码语言:javascript
复制
R/
src/
 |- Makevars
 |- Makevars.win
 |- header.h
 |- action.cpp
man/
DESCRIPTION
NAMESPACE

在这种方法下,头文件仅限于包。要在LinkingTo:文件中启用DESCRIPTION方法,并且通常需要更好的包含,您应该针对的结构如下:

代码语言:javascript
复制
R/
inst/
 |- include/
    |- header.h
src/
 |- Makevars
 |- Makevars.win
 |- action.cpp
man/
DESCRIPTION
NAMESPACE

因此,在action.cpp文件中,您只需使用:

代码语言:javascript
复制
#include <header.h> 

代码语言:javascript
复制
#include "header.h"

现在,在MakevarsMakevars.win文件中包含/src中的标题时,/inst/include的内容应该是:

代码语言:javascript
复制
PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
PKG_CPPFLAGS =  -I../inst/include/

第二行是最重要的。

有关文件包含的一个非常简单的示例,请参阅西特莫 {免责声明:我编写了R包}。

有关更强烈和更有趣的版本,请参见德普利

如果代码将完整的代码抛到GitHub上,可以提供更多的帮助。

票数 5
EN

Stack Overflow用户

发布于 2016-05-05 14:22:55

我能够使用无覆盖的响应访问C库MyLibrary.dll中的函数。

这是我的目录结构:

代码语言:javascript
复制
R/
inst/
  |- include/
  |- header.h
src/
  |- Makevars
  |- Makevars.win
  |- action.cpp
 bin/
  |- MyLibrary.dll
 man/
 DESCRIPTION
 NAMESPACE

下面是我的Makevars/Makevars.win文件:

代码语言:javascript
复制
PKG_LIBS = -L../bin -lMyLibrary
PKG_CPPFLAGS =  -I../inst/include/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36927141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档