从C ++项目中调用octave .m文件,未定义对octave :: feval的引用

时间:2019-05-24 22:32:38

标签: c++ windows gcc g++ octave

我正在尝试从c ++项目中调用octave .m文件,因为我正在使用此octave example。我在Windows Server 2012上安装了Octave-5.1.0.0,并使用g ++(gcc)7.4.0进行了编译。

我收到以下错误:

undefined reference to `octave::feval(std::string const&, octave_value_list const&,int)'
relocation truncated to fit: R_X86_64_PC32 against undefined symbol `octave::feval(std::string const&, octave_value_list const&, int)'
undefined reference to `Array<std::string>::nil_rep()'
relocation truncated to fit: R_X86_64_PC32 against undefined symbol `Array<std::string>::nil_rep()'
undefined reference to `Array<std::string>::resize_fill_value() const'
undefined reference to `Array<std::string>::resize_fill_value() const'
collect2: error: ld returned 1 exit status 

我在线阅读了一个可能的原因,可能是_GLIBCXX_USE_CXX11_ABI宏的值冲突。

所以我在.cpp文件的开头添加了以下代码

#ifdef   _GLIBCXX_USE_CXX11_ABI
#undef   _GLIBCXX_USE_CXX11_ABI
#endif

#define  _GLIBCXX_USE_CXX11_ABI  0

这是我要包含的头文件:

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

并且我使用以下命令进行链接

mkoctfile --link-stand-alone -o test test.o -loctinterp -loctave -D_GLIBCXX_USE_CXX11_ABI=0

0 个答案:

没有答案