Open xloem opened 6 months ago
Seems like perhaps you have an outdated wxwidgets library in your path (ie, your grep should be finding a libwx_gtk3u_core*.so file).
Thanks a bunch.
This is what I have so far:
$ objdump -t wx/libwx_gtk3u_core-3.2.so | grep _N9wxListBox13DoInsertItemsERK21wxArrayStrings
AdapterjPPv16wxClientDataType
0000000000415460 l F .text 000000000000000c _ZThn640_N9wxListBox13DoInsertItemsERK21wxArrayStringsAdapterjPPv16wxClientDataType.localalias
0000000000415460 g F .text 000000000000000c _ZThn640_N9wxListBox13DoInsertItemsERK21wxArrayStringsAdapterjPPv16wxClientDataType
The virtual base offset is 640 instead of 712. I found on stackoverflow this might be from configuration changes when including the header.
It turns out I do have a system binary installed but it also has the symbol listed with 640 rather than 712:
$ objdump -T /usr/lib64/libwx_gtk3u_core-3.0.so.0.4.0 | grep _N9wxListBox13DoInsertItemsERK21
wxArrayStringsAdapterjPPv16wxClientDataType
00000000002ec810 g DF .text 000000000000000c WXU_3.0 _ZThn640_N9wxListBox13DoInsertItemsERK21wxArrayStringsAdapterjPPv16wxClientDataType
I wonder if perhaps your system copy of wxWidgets config files got used somehow? Do you have any build logs available?
It looks like wxListBox has an extra base class of wxItemContainer
in the sip file. I'm not familiar with sip.
$ grep -r class.wxListBox
ext/wxWidgets/include/wx/listbox.h:// wxListBox interface is defined by the class wxListBoxBase
ext/wxWidgets/interface/wx/listbox.h: @class wxListBox
ext/wxWidgets/interface/wx/listbox.h:class wxListBox : public wxControl,
ext/wxWidgets/src/msw/listbox.cpp:class wxListBoxItem : public wxOwnerDrawn
sip/gen/listbox.sip:class wxListBox : wxControl, wxItemContainer
sip/gen/listbox.sip:}; // end of class wxListBox
I'll rebuild logging output. It takes a while.
It looks like wxListBox has an extra base class of
wxItemContainer
in the sip file. I'm not familiar with sip.$ grep -r class.wxListBox ext/wxWidgets/include/wx/listbox.h:// wxListBox interface is defined by the class wxListBoxBase ext/wxWidgets/interface/wx/listbox.h: @class wxListBox ext/wxWidgets/interface/wx/listbox.h:class wxListBox : public wxControl, ext/wxWidgets/src/msw/listbox.cpp:class wxListBoxItem : public wxOwnerDrawn sip/gen/listbox.sip:class wxListBox : wxControl, wxItemContainer sip/gen/listbox.sip:}; // end of class wxListBox
Yes, the .sip file should match the ext/wxWidgets/interface header, which it seems to. The actual inheritance hierarchy is a lot more complicated (go read the headers for wxListBox in ext/wxWidgets/include/).
Here's a build.log.
I missaw the comma. You're right the classes match.
It seems surprising to me that the virtual functions are in a different order between the interface header and the main header; do you know how binary compatibility is maintained given the virtual member functions are declared in a different order?
Operating system: Red Hat Enterprise Linux 7.7 wxPython version & source: I've tried both pip and git tag wxPython-4.2.1 Python version & source: 3.10.11 self-built I think from 425065bb002b9cbf9c12f61a6f3102f2ce2b8d14
Description of the problem: When I import wx, I get
Note: