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

C++ 将Rcpp与外部标头和库同步以构建批处理地理编码包,c++,r,geocoding,rcpp,C++,R,Geocoding,Rcpp,晚上好 目标:我试图在运行Windows的机器上,使用RStudio中的RCPP,基于纽约市城市规划部的地理支持软件,构建一个批处理地理编码包。Geosupport除了返回坐标外,还返回许多有用的信息,包括建筑物标识号和普查地理位置。我认为这样一个软件包对研究人员和社区倡导者使用纽约市的数据非常有用 背景:Geosupport可在上免费下载。下载时附带了一个批量地理编码接口(称为GBAT)。此外,还提供了头、数据和库文件,这样用户就可以从C、C++或VB构建的应用程序中地理编码。库文件有一个DL

晚上好

目标:我试图在运行Windows的机器上,使用RStudio中的RCPP,基于纽约市城市规划部的地理支持软件,构建一个批处理地理编码包。Geosupport除了返回坐标外,还返回许多有用的信息,包括建筑物标识号和普查地理位置。我认为这样一个软件包对研究人员和社区倡导者使用纽约市的数据非常有用

背景:Geosupport可在上免费下载。下载时附带了一个批量地理编码接口(称为GBAT)。此外,还提供了头、数据和库文件,这样用户就可以从C、C++或VB构建的应用程序中地理编码。库文件有一个DLL扩展,并且是用C编译的(不是C++,我用一个开发人员检查过)。p> 状态:到目前为止,我已经能够包括头文件和设置工作区。我在尝试使用C库中的函数时遇到了问题。我一直在阅读使用Makevars编写R扩展的文章,但我仍然不确定如何继续。我使用RStudio的Rtools和RCPP构建了我的包,但没有生成makevars文件。我买了德克的书(在类似我的帖子中也有提及),但还没有到

谢谢大家!

格雷琴

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

没有书吗?没问题

首先,通过
Rcpp.package.skeleton()
或使用RStudio的位创建包骨架,尝试理解包结构

对于其他方面,在和中的联机中有许多示例

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

#include "../Include/NYCgeo.h"
这不是一种好的样式,因为它与R包的典型文件结构不符

尝试使用库头时,应选择以下包结构之一:

R/
src/
 |- Makevars
 |- Makevars.win
 |- header.h
 |- action.cpp
man/
DESCRIPTION
NAMESPACE
在这种方法下,头文件仅限于包。要在
说明
文件中启用
链接到:
的方法,并且通常更好地包含内容,您应该针对的结构是:

R/
inst/
 |- include/
    |- header.h
src/
 |- Makevars
 |- Makevars.win
 |- action.cpp
man/
DESCRIPTION
NAMESPACE
因此,在
action.cpp
文件中,您只需使用:

#include <header.h> 
话虽如此,当在
/inst/include
中包含标题时,
/src
中的
Makevars
Makevars.win
文件的内容应该是:

PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
PKG_CPPFLAGS =  -I../inst/include/
第二行是最重要的

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

有关更激烈和有趣的版本,请参阅

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

没有书吗?没问题

首先,通过
Rcpp.package.skeleton()
或使用RStudio的位创建包骨架,尝试理解包结构

对于其他方面,在和中的联机中有许多示例

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

#include "../Include/NYCgeo.h"
这不是一种好的样式,因为它与R包的典型文件结构不符

尝试使用库头时,应选择以下包结构之一:

R/
src/
 |- Makevars
 |- Makevars.win
 |- header.h
 |- action.cpp
man/
DESCRIPTION
NAMESPACE
在这种方法下,头文件仅限于包。要在
说明
文件中启用
链接到:
的方法,并且通常更好地包含内容,您应该针对的结构是:

R/
inst/
 |- include/
    |- header.h
src/
 |- Makevars
 |- Makevars.win
 |- action.cpp
man/
DESCRIPTION
NAMESPACE
因此,在
action.cpp
文件中,您只需使用:

#include <header.h> 
话虽如此,当在
/inst/include
中包含标题时,
/src
中的
Makevars
Makevars.win
文件的内容应该是:

PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
PKG_CPPFLAGS =  -I../inst/include/
第二行是最重要的

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

有关更激烈和有趣的版本,请参阅


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

我可以使用Coatless的响应访问C库
MyLibrary.dll
中的函数

以下是我的目录结构:

R/
inst/
  |- include/
  |- header.h
src/
  |- Makevars
  |- Makevars.win
  |- action.cpp
 bin/
  |- MyLibrary.dll
 man/
 DESCRIPTION
 NAMESPACE
这是我的
Makevars
/
Makevars.win
文件:

PKG_LIBS = -L../bin -lMyLibrary
PKG_CPPFLAGS =  -I../inst/include/

我能够使用Coatless的响应访问C库
MyLibrary.dll
中的函数

以下是我的目录结构:

R/
inst/
  |- include/
  |- header.h
src/
  |- Makevars
  |- Makevars.win
  |- action.cpp
 bin/
  |- MyLibrary.dll
 man/
 DESCRIPTION
 NAMESPACE
这是我的
Makevars
/
Makevars.win
文件:

PKG_LIBS = -L../bin -lMyLibrary
PKG_CPPFLAGS =  -I../inst/include/

很好,很有耐心。这很好,不穿外套!感谢您花时间精心设计了这样一个透彻、通俗易懂的解释。我将把代码发布到我的GitHub帐户。我刚刚更新了我的问题,添加了一个指向我的项目的链接。我能够利用科特勒斯的回应让头球发挥作用。我仍然对如何调整Makevars/Makevars.win文件以反映dll文件的位置感到困惑(请参阅)。非常好,非常耐心。这是非常好的,无需涂层的!感谢您花时间精心设计了这样一个透彻、通俗易懂的解释。我将把代码发布到我的GitHub帐户。我刚刚更新了我的问题,添加了一个指向我的项目的链接。我能够利用科特勒斯的回应让头球发挥作用。我仍然对如何调整Makevars/Makevars.win文件以反映dll文件的位置感到困惑(请参阅)。