为什么我的 swig 生成的 tcl 代码在运行时缺少方法?

Why is my swig generated tcl code missing methods at runtime?

我正在使用 swig 4.0.2 生成一个包供 tcl 使用。

源 .i 文件包含很多 classes,生成的 _wrap.cpp 文件包含所有 classes 及其方法,正如我所期望的那样,一切都可以编译没有警告。

但是,至少有 1 class,当我从 tcl 脚本调用实例上的方法时,我收到一个 运行time 错误,指出该方法不存在。该错误还转储了 class 的所有可用方法。该列表中不存在我尝试调用的方法以及其他一些方法。

Invalid method. Must be one of: configure cget -acquire -disown -delete ...

尽管缺少哪些方法是一致的,但似乎没有任何模式不在列表中。

缺失的方法分散在声明的 swig 接口中。即它们不在开头或结尾,也不在一个块中。我看不到它们的名称和函数签名的模式。

发生错误时运行的函数是SWIG_Tcl_MethodCommand:swig生成的函数。它负责按名称查找方法并打印出错误代码。

函数包装器全部存在并在 class 的 swig_method 数组中被引用。

我本以为,如果通过查找无法找到某个方法,那么它要么全有要么全无。

有人知道我可以在哪里查找错误吗? 恐怕我还没有能够隔离成一个我可以分享的小测试用例。

我正在使用 swig 4.02,为 tcl8 生成代码并在 c++ 14 下编译。

问题是由复制粘贴代码引起的。

我正在处理的项目中存在第二个 swig 包。它重新声明了相同的 class 接口,但缺少一些方法!

如果我同步声明,那么一切正常。

这留下了带有未同步 swig 接口的原始代码(使用 swig1.0 生成)如何工作的问题。