在带有Rcpp的Ubuntu Xenial上抛出std :: runtime_error时出现段错误

时间:2019-02-02 11:34:47

标签: c++ r rcpp libtorch

我和Rcpp以及libtorch一起表现得很奇怪。

我有一个具有2个功能的文件:

#include <torch/torch.h>
#include <Rcpp.h> 

// [[Rcpp::export]]
void test_error () {  
  throw std::runtime_error("hi this is my error");
}

// [[Rcpp::export]]
void test_error2 () {  
  Rcpp::Rcout << torch::arange(1) << std::endl;
}

当我致电test_error()时,会遇到段错误(g ++):

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted (core dumped)

clang ++错误是:

terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_M_create
Aborted (core dumped)

test_error2可以正常工作。

此错误仅在Ubuntu Xenial上发生。我使用Ubuntu Trusty和MacOS进行了测试,没有出现段错误。

如果我从文件中删除了test_error2的代码,即使没有删除#include <torch/torch.h>行,也没有任何错误。

还测试了使用clang ++和g ++进行编译。同样的错误。

我创建了一个小型仓库here,其中包含我可以做的最少示例。

有人知道这可能是什么吗?

  

注意配置文件将自动从pytorch的网站下载并安装libtorch。因此,如果您不想这样做,请不要安装该软件包。

2 个答案:

答案 0 :(得分:1)

您可以尝试更换

throw std::runtime_error("hi this is my error");

我们的文档建议您做什么(在一个称为Rcpp的函数中)

Rcpp::stop("hi this is my error");

看看会发生什么?

答案 1 :(得分:1)

结果表明,使用较旧版本g++编译软件包可以正常工作。

我安装了g++-4.9

sudo apt-get install g++-4.9

编辑了.R/Makevars以使用g++-4.9

CXX=g++-4.9
CXX11=g++-4.9

然后重新编译Rcpp和程序包。