【发布时间】:2023-03-25 23:55:02
【问题描述】:
我正在尝试将 wxPython 嵌入到 wxWidgets 应用程序中,但出现以下错误:
../src/common/object.cpp(251): assert "classTable->Get(m_className) == NULL" 在 Register() 中失败:RTTI 表中已经存在类 "wxCommandEvent" - 你使用过 IMPLEMENT_DYNAMIC_CLASS( ) 多次或链接某个目标文件两次)?
我已经追踪到: wxPyCoreAPIPtr = (wxPyCoreAPI*)PyCObject_Import("wx.core", "_wxPyCoreAPI");
所以我猜测这是失败的,因为它试图 dlopen 一个已经加载的 .so(C 和 Python 代码都需要的核心 wxwidgets 库)。我可以通过 dlopen 的 RTLD_NOLOAD 标志获取打开的 .so 的句柄。
有什么方法可以将该句柄提供给 Python 并告诉它将该句柄“加载”到解释器的上下文中?
编辑:刚刚注意到,使用 wxWidgets origin/WX_3_0_BRANCH、Python 2.7、wxPython origin/master 在 wxPython 中的“嵌入式”示例中可以重现此问题。
另外,它可能特定于 gtk3 配置...当我使用 gtk2 编译时,它似乎可以正常工作。
【问题讨论】:
标签: python wxpython wxwidgets embedding dlopen