我正在使用SWIG 3.0.7。
我有以下简单的c ++文件:
myif.h
class If
{
public:
const std::string str() const;
If(const char *str);
private:
std::string m_str;
};
myif.c
#include "myif.h"
const std::string
If::get_str() const
{
return m_str;
}
If::If(const char *str)
{
m_str = str;
}
这是swig接口文件:
myif.i
%module myif
%{
#include "myif.h"
%}
%include "stl.i"
%include "myif.h"
以下是构建所有内容的命令:
$PATH={swig_path}/bin swig -c++ -tcl myif.i
g++ -fPIC -c myif_wrap.cxx
g++ -shared myif_wrap.o -o myif_wrap.so
没有错误/警告。但是当我加载库时,在tclsh中,我收到以下错误:
% load ./myif_wrap.so
couldn't load file "./myif_wrap.so": ./myif_wrap.so: undefined symbol: _ZNK2If3strEv
它是说我需要链接STL库吗?但不知道该怎么做。
[编辑]是的,我的不好,函数名称错了,我应该调用C ++调用C ++之前在C ++中加载库之前确保一切正常; .i文件中的模块名称也需要与库名匹配。