RCPP使用第三方库Kvaser kvmlib

时间:2018-11-04 06:12:03

标签: c++ r rcpp

我正在寻找使用Kvaser SDK(https://www.kvaser.com/developer-blog/get-hardware-kvaser-sdk-libraries/)在R Shiny应用程序中将罐式存储器中的文件转换为可用格式的最佳方法。数据文件以.KMF文件形式记录在设备上。 kvmlib库中有一些函数可以将该文件转换为.KME50文件,然后可以使用kvlclib库中的函数将其转换为.csv文件。

我希望能够从R内部使用此API中的函数调用。我决定使用Rcpp并尝试以这种方式连接到库。我将所有需要的头文件与canlib.dll文件一起放入一个文件夹中,并将其作为R工作区。每当我尝试为包含任何kvlclib.h,kvmlib.h或windows.h标头的.cpp文件运行sourceCpp时,都会遇到一系列错误。

有人可以建议我的方法是否正确。我认为这可能与连接这些库有关,对于C ++来说,我是新手,而且还链接到第三方库。包含的是我遇到的错误的示例。

Rcpp errors

#include <Rcpp.h>
#include <windows.h>


using namespace Rcpp;

// [[Rcpp::export]]
double meanC(NumericVector x) {
  int n = x.size();
  double total = 0;

  for(int i = 0; i < n; ++i) {
    total += x[i];
  }
  return total / n;
}

1 个答案:

答案 0 :(得分:3)

windows.h和一些R标头都定义了像Realloc这样的宏。您可以通过使用

来禁止R标头这样做
#define STRICT_R_HEADERS
#include <Rcpp.h>

@SymbolixAU在评论中提到:在包的上下文中,您还可以使用src/Makevars

PKG_CPPFLAGS=-DSTRICT_R_HEADERS