尝试从 Octave 的独立程序示例编译示例代码,在第一行出现段错误
Trying to compile example code from Octave's Standalone Programs example, getting segfault on first line
我正在尝试学习如何将 Octave 嵌入到我的 C++ 代码中。当 运行 来自 here 的第二个示例时,代码编译正常,但是当 运行 代码时,在尝试初始化解释器时,第一行出现分段错误。我不是很擅长 C++,但即使查找它我也找不到任何答案。
原始代码使用 octave::feval 而不是 feval,这引发了一个不同的命名空间错误,所以我只是摆脱了它并在包含中添加了 parse.h。我怀疑这与问题完全相关,但这是我所做的修改。
#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
查看的文档版本与我在计算机上安装的版本不同。我有 4.2,但我正在查看 4.4 文档,它针对我试图完成的任务提供了不同的代码。
我正在尝试学习如何将 Octave 嵌入到我的 C++ 代码中。当 运行 来自 here 的第二个示例时,代码编译正常,但是当 运行 代码时,在尝试初始化解释器时,第一行出现分段错误。我不是很擅长 C++,但即使查找它我也找不到任何答案。
原始代码使用 octave::feval 而不是 feval,这引发了一个不同的命名空间错误,所以我只是摆脱了它并在包含中添加了 parse.h。我怀疑这与问题完全相关,但这是我所做的修改。
#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
查看的文档版本与我在计算机上安装的版本不同。我有 4.2,但我正在查看 4.4 文档,它针对我试图完成的任务提供了不同的代码。