2

我对 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++ 编译。同样的错误。

我在这里用我能做的最小例子创建了一个 smalll repo 。

有谁知道这可能是什么?

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

4

2 回答 2

1

你可以尝试更换

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

使用我们的文档建议您执行的操作(在调用 Rcpp 的函数中,不少于)

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

看看会发生什么?

于 2019-02-03T01:24:56.910 回答
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和包。

于 2019-02-04T11:56:31.950 回答