C++ 使用Rcpp在Ubuntu Xenial上抛出std::runtime_错误时出现SEGFULT

C++ 使用Rcpp在Ubuntu Xenial上抛出std::runtime_错误时出现SEGFULT,c++,r,rcpp,libtorch,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::Rco

我对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;
}
clang++错误是:

terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_M_create
Aborted (core dumped)
测试错误2
正常工作

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

如果我从文件中删除
test\u error 2
的代码,即使我没有删除
\include
行,我也没有任何错误

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

我用最少的例子创建了一个小型回购协议

有人知道这可能是什么吗

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

你能试着换一下吗

throw std::runtime_error("hi this is my error");
使用我们的文档建议您执行的操作(在名为function的Rcpp中,不少于)


看看会发生什么?

结果表明,使用较旧版本的
g++
编译包效果很好

我安装了
g++-4.9

CXX=g++-4.9
CXX11=g++-4.9
sudo apt get install g++-4.9

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

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

然后重新编译Rcpp和包。

我添加了调用堆栈。我能得到的最简单的例子是R包。我不认为这是合乎情理的。“丹尼尔法贝尔也可以在我的机器上运行这个Ubuntu仿生器,但是我在使用一个独立的C++文件时,没有一个错误,只有一个代码> Rcpp < /COD>包含代码和代码< > TestYORIORNOR()/代码>然后在用<代码> RCPP::SuxCeCpp:编译之后调用<代码> TESTEXError()/>代码>天真的问题:为什么需要外部火炬库?当您使用发行版中的版本时会发生什么?我在我的Ubuntu盒上看到了
libtorch3dev
。尽管名称不同,但它们似乎不是相同的库。我正在使用libtorch,它是后面的张量库,libtorch3dev似乎是另外一个东西;这是一个未被处理的异常(但不是您试图抛出的异常)。FWIW,这是我最初的想法之一,当我尝试时,同样的事情发生了;OP的里程可能会不断变化。那么回到怀疑ABI混淆的问题上来?是的,我们中的一些人(嗨,@duckmayer)暗示了一个已知的问题。如果
configure
script拉取预构建组件,还应检查它们的使用是否可行。我肯定有一些宏和测试在那里。。。(顺便说一句,我没有投反对票)是的,没有你的帮助,我是不会解决的。我不知道它可能是编译器版本。(也不知道什么是ABI)。你的意思是,我应该检查编译器是否在配置脚本中兼容,如果没有,会引发错误吗?你正在拉入一个预构建的C++库和那些DON;t在主要版本中运行良好,因此,如果检测到
clangg
,或者检测到不同(主要)版本的
g++
,我至少会吠叫。
CXX=g++-4.9
CXX11=g++-4.9