Попытка скомпилировать пример кода из примера автономных программ Octave, получив segfault в первой строке - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь научиться встраивать Octave в мой код C ++. При выполнении второго примера из здесь код компилируется нормально, но при выполнении кода ошибка сегментации появляется в первой строке при попытке инициализировать интерпретатор. Я не очень хорошо разбираюсь в C ++, но даже при поиске я не могу найти ответы.

В оригинальном коде вместо feval был октава :: февал, что вызывало другую ошибку пространства имен, поэтому я просто избавился от этого и добавил parse.h в include. Я сомневаюсь, что это вообще связано с этой проблемой, но я сделал эту модификацию.

#include <iostream>
#include <octave/oct.h>
#include <octave/octave.h>
#include <octave/parse.h>
#include <octave/interpreter.h>

int
main (void)
{
  // Create interpreter.

  octave::interpreter interpreter;

  try
    {
      int status = interpreter.execute ();

      if (status != 0)
        {
          std::cerr << "creating embedded Octave interpreter failed!"
                    << std::endl;
          return status;
        }

      octave_idx_type n = 2;
      octave_value_list in;

      for (octave_idx_type i = 0; i < n; i++)
        in(i) = octave_value (5 * (i + 2));

      octave_value_list out = feval ("gcd", in, 1);

      if (out.length () > 0)
        std::cout << "GCD of ["
                  << in(0).int_value ()
                  << ", "
                  << in(1).int_value ()
                  << "] is " << out(0).int_value ()
                  << std::endl;
      else
        std::cout << "invalid\n";
    }
  catch (const octave::exit_exception& ex)
    {
      std::cerr << "Octave interpreter exited with status = "
                << ex.exit_status () << std::endl;
    }
  catch (const octave::execution_exception&)
    {
      std::cerr << "error encountered in Octave evaluator!" << std::endl;
    }

  return 0;
}

Фактический выход должен быть:

GCD of [10, 15] is 5

Я использую Linux Ubuntu 18.04 с Octave 4.2.2

1 Ответ

0 голосов
/ 28 января 2019

Рассматриваемая документация отличается от версии, которую я установил на моем компьютере. У меня 4.2, но я просматривал 4.4 документа, в котором есть другой код для задачи, которую я пытался выполнить.

...