【发布时间】:2021-07-02 21:56:48
【问题描述】:
我正在使用 swig 4.0.2 生成一个包供 tcl 使用。
源 .i 文件包含许多类,生成的 _wrap.cpp 文件包含所有类及其方法,正如我所期望的那样,一切编译正常,没有任何警告。
但是,对于至少 1 个类,当我从 tcl 脚本调用实例上的方法时,我收到一个运行时错误,指出该方法不存在。该错误还会转储该类的所有可用方法。我尝试调用的方法以及其他一些方法在该列表中不存在。
Invalid method. Must be one of: configure cget -acquire -disown -delete ...
尽管缺少哪些方法是一致的,但似乎没有任何方法不在列表中。
缺少的方法分散在声明的 swig 接口中。即它们不在开头或结尾,也不在一个块中。我看不到它们的名称和函数签名的模式。
发生错误时正在运行的函数是SWIG_Tcl_MethodCommand:swig生成的函数。它负责按名称查找方法并打印出错误代码。
函数包装器都存在并在类的swig_method 数组中引用。
我会想象,如果一个方法不会通过查找找到它,那将是全部或全部。
有人知道我可以在哪里查找错误吗? 恐怕我无法隔离成一个我可以分享的小测试用例。
我正在使用 swig 4.02,为 tcl8 生成代码并在 c++ 14 下编译。
【问题讨论】: