Segfault при выдаче std :: runtime_error в Ubuntu Xenial с помощью Rcpp - PullRequest
0 голосов
/ 02 февраля 2019

У меня очень странное поведение с 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>.

Также проверял компиляцию слязг ++ и г ++.Та же ошибка.

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

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

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

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

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

0 голосов
/ 03 февраля 2019

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

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

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

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

и посмотреть, что произойдет?

...