C++ 使用Rcpp在Ubuntu Xenial上抛出std::runtime_错误时出现SEGFULT
我对Rcpp和libtorch有一种非常奇怪的行为 我有一个具有2个功能的文件: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
#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