我正在尝试从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