我正在尝试使用以下非常简单的接口文件使用SWIG包装.h文件:
%module example
%{
/* Includes the header in the wrapper code */
#include "../pointmatcher/PointMatcher.h"
%}
/* Parse the header file to generate wrappers */
%include "../pointmatcher/PointMatcher.h"
包装尝试失败,并显示以下错误:
C:\Data\Projects\lpm-source\libpointmatcher-swig\wrapper>C:\Data\Downloads\swigw
in-3.0.5\swig.exe -csharp -cpperraswarn example.i
..\pointmatcher\PointMatcher.h(61) : Warning 205: CPP #error ""You need libnabo
version 1.0.6 or greater"".
..\pointmatcher\PointMatcher.h(130) : Error: Syntax error in input(1).
有问题的一行是:
template<typename T>
struct PointMatcher <-- this line
{
来自此文件:https://github.com/ethz-asl/libpointmatcher/blob/master/pointmatcher/PointMatcher.h#L130
为什么SWIG解析失败?
答案 0 :(得分:1)
Swig将文件解析为C文件而不是C ++,并且不理解template
关键字。尝试:
swig -c++ -csharp -cpperraswarn example.i
请参阅swig documentation on wrapping C++。
此外,宏DEF_REGISTRAR(...)
和DEF_REGISTRAR_IFACE(...)
等功能会让swig感到困惑。因此%include
要么定义这些文件,要么通过添加
#define DEF_REGISTRAR_IFACE(...)
#define DEF_REGISTRAR(...)
在%include "../pointmatcher/PointMatcher.h"
。