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");
и посмотрим что получится?