为了账号安全,请及时绑定邮箱和手机立即绑定

SWIG 在 Windows 中生成 C++ Python3 包装器导致断言 MSVC 2017

SWIG 在 Windows 中生成 C++ Python3 包装器导致断言 MSVC 2017

牛魔王的故事 2021-08-17 17:06:29
使用 SWIG 围绕 C++ 类生成包装器会在运行时导致奇怪的断言:Assertion failed!Program: C:\Python37\python37_d.dllFile: c:\_work\4\s\objects\typeobject.cLine: 3634Expression: PyTuple_Check(args)For information on how your program can cause an assertionfailure, see the Visual C++ documentation on asserts(Press Retry to debug the application - JIT must be enabled)如果在弹出的对话框上点击忽略,一切似乎都正常。我创建了一个示例程序来尝试复制问题并遇到了同样的问题:主程序#include "testwrapper.h"#pragma push_macro("slots")#undef slots#include "Python.h"#pragma pop_macro("slots")#include "SwigModules/generated/swig_runtime.h"PyObject * ConvertToWrapper(SwigInterface * instance){    swig_type_info * pTypeInfo = SWIG_TypeQuery("SwigInterface *");    PyObject* obj = SWIG_NewPointerObj(instance, pTypeInfo, 0); <- issue occurs here    return obj;}TestWrapper * wrapper = new TestWrapper();void TestSwig(){  Py_Initialize();  PyRun_SimpleString("import test_module");  ConvertToWrapper(wrapper);  Py_Finalize();}int main(int argc, char *argv[]){  TestSwig();  return 0;}测试包装器.h#pragma once#include "swiginterface.h"class TestWrapper : public  SwigInterface{public:  TestWrapper(){}  virtual ~TestWrapper(){}  virtual void Test();};swiginterface.h#pragma onceclass SwigInterface{public:  virtual ~SwigInterface(){}  virtual void Test() = 0;};test_module.i(swig 接口文件)%module test_module%{#include "../swiginterface.h"%}%include "../SwigInterface.h"%inline %{  SwigInterface * test;%}setup_function (python)from distutils.core import setup, Extensionsetup(name="test_module",      py_modules=['test_module'],      ext_modules=[Extension("_test_module",                     ["test_module.i"],                     extra_compile_args=["-DSWIG_TYPE_TABLE=test_module"],                     swig_opts=["-c++", "-py3"],                  )])
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

或者升级到 SWIG 4.0,它有一个修复


查看完整回答
反对 回复 2021-08-17
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

为了解决这个问题,我需要从 Python3.7 降级到 Python3.6


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 266 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信