./theheader.h:349: Error: Syntax error in input(3).
违规线路:
string read_gdbm(GDBM_FILE dbf, string key_str, bool show_err = gbls.verbose);
有任何想法吗?
通常,SWIG 中的语法错误意味着它无法理解有问题的行(这可能很烦人,因为行号不遵循诸如%define
s 之类的宏)。因此,我建议您检查string
(应该是std::string
?是否已定义?),GDBM_FILE
(是否已定义?是否应该在命名空间中?)也许gbls.verbose
(是否已定义?)对 SWIG 有意义。swig
使用该选项运行可能会有所帮助-E
(确保重定向标准输出),找到相应的行并向后搜索所涉及的每种类型。您可能需要添加一些#include
s.
还要检查上一行,以确保您没有遗漏分号或类似的东西。
附带说明一下,由于不同的原因,我遇到了同样的问题:我试图使用矢量 <vector < double >>。现在根据 C++99 标准,“>>”字符序列不能与模板一起使用,因此会弹出 swig 错误消息。解决方案是简单地添加一个额外的空间来分隔它们。
我遇到了类似的问题,并-E
帮助我了解宏定义隐藏在#ifndef SWIG
块内。我怀疑这里它没有看到 的定义GDBM_FILE
,可能是因为它没有递归。
我遇到了类似的错误。我会澄清我的过程,希望它可以有所帮助。
库文件
...
%begin %{
#include "header1.h"
%}
...
%include "header1.h"
header1.h
19 typedef struct T {
...
23 } PACKED TlvHdr;
错误信息如下
./header1.h:23: Error: Syntax error in input(3).
我检查了 SWIG 文档(http://www.swig.org/Doc1.3/SWIG.html 5.7.1),发现语法错误很常见,可能是由 SWIG 错误引起的。
文档建议我们遇到语法错误,使用“#ifnedf SWIG”省略会使 SWIG 解析器发出错误的语句。所以我更改了 header1.h 文件,然后错误消失了。
header1.h
#ifndef SWIG
19 typedef struct T {
...
23 } PACKED TlvHdr;
#endif
如果您无法修改 theheader.h 文件,您可以创建一个仅包含您需要的声明的新头文件,并将文件从 theheader.h 替换为 %include 指令处的新头文件。