Segfault при выдаче std::runtime_error в Ubuntu Xenial с помощью Rcpp

У меня очень странное поведение с 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() Я получаю segfault (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 ++. Та же ошибка

Я создал маленькое репо здесь с минимальным примером, который я мог сделать.

Кто-нибудь знает, что это может быть?

Обратите внимание, что файл конфигурации загрузит и установит libtorch автоматически с веб-сайта pytorch. Так что не устанавливайте пакет, если вы не хотите этого.

2 ответа

Решение

Оказывается, компилирование пакета с более старой версией 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 и пакет.

Можете ли вы попробовать заменить

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

с тем, что предлагают вам наши документы (в Rcpp-функции, не меньше)

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

и посмотрим что получится?

Другие вопросы по тегам