我和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。因此,如果您不想这样做,请不要安装该软件包。
答案 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和程序包。