如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用



我已经阅读了流畅的问题和答案,但我没有解决我的问题。

如何排除故障:未定义对"非虚拟 thunk to ..."的引用

我在Windows上用mingw32构建代码::块。 我在链接步骤上收到错误,这是我的链接命令:

mingw32-g++.exe -Lbase/tinyxml -LC:/wxWidgets-3.1.1/lib/gcc_dll -Ldevel31 -Lexchndl/win32/lib -o devel31/codeblocks.exe .objs31/src/app.o .objs31/src/appglobals.o .objs31/src/associations.o .objs31/src/backtracedlg.o .objs31/src/breakpointsdlg.o .objs31/src/compilersettingsdlg.o .objs31/src/cpuregistersdlg.o .objs31/src/crashhandler.o .objs31/src/debugger_interface_creator.o .objs31/src/debuggermenu.o .objs31/src/debuggersettingscommonpanel.o .objs31/src/debuggersettingsdlg.o .objs31/src/debuggersettingspanel.o .objs31/src/disassemblydlg.o .objs31/src/dlgabout.o .objs31/src/dlgaboutplugin.o .objs31/src/editkeywordsdlg.o .objs31/src/editorconfigurationdlg.o .objs31/src/environmentsettingsdlg.o .objs31/src/examinememorydlg.o .objs31/src/find_replace.o .objs31/src/goto_file.o .objs31/src/infopane.o .objs31/src/main.o .objs31/src/notebookstyles.o .objs31/src/printdlg.o .objs31/src/projectdepsdlg.o .objs31/src/projectmanagerui.o .objs31/src/projectoptionsdlg.o .objs31/src/recentitemslist.o .objs31/src/scriptconsole.o .objs31/src/scriptingsettingsdlg.o .objs31/src/splashscreen.o .objs31/src/startherepage.o .objs31/src/switcherdlg.o .objs31/src/threadsdlg.o .objs31/src/virtualbuildtargetsdlg.o .objs31/src/watchesdlg.o  .objs31/src/resources/resources.res -Wl,--enable-auto-import -Wl,--no-undefined -m32  -lcodeblocks -lexchndl -lshfolder -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lcomctl32 -lodbc32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lwxmsw31u -mwindows

链接错误消息为:

.objs31/src/startherepage.o:startherepage.cpp:(.rdata$_ZTV9MyHtmlWin[__ZTV9MyHtmlWin]+0x414): undefined reference to `non-virtual thunk to wxHtmlWindow::SetHTMLWindowTitle(wxString const&)'
.objs31/src/startherepage.o:startherepage.cpp:(.rdata$_ZTV9MyHtmlWin[__ZTV9MyHtmlWin]+0x418): undefined reference to `non-virtual thunk to wxHtmlWindow::OnHTMLLinkClicked(wxHtmlLinkInfo const&)'
C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/5.1.0/../../../../mingw32/bin/ld.exe: .objs31/src/startherepage.o: bad reloc address 0x418 in section `.rdata$_ZTV9MyHtmlWin[__ZTV9MyHtmlWin]'
collect2.exe: error: ld returned 1 exit status

我已经检查了libwxmsw31u中的符号,没关系:

$ nm -po libwxmsw31u.a | c++filt | grep wxHtmlWindow::SetHTMLWindowTitle
libwxmsw31u.a:d021618.o:00000000 T non-virtual thunk to wxHtmlWindow::SetHTMLWindowTitle(wxString const&)
libwxmsw31u.a:d002747.o:00000000 T wxHtmlWindow::SetHTMLWindowTitle(wxString const&)

所以,我不知道我的链接过程发生了什么,以及如何解决这个问题?

我搜索了很多关于这个错误的信息,并从这篇文章中得到了一些提示(它是中文版(:

https://zhuanlan.zhihu.com/p/27121990

所以,我回忆起我构建代码::块的步骤,我发现我已经为另一个错误链接添加了一个标志。标志是:

_GLIBCXX_USE_CXX11_ABI=0

但是,当我构建libwxmsw31u.a时,我没有添加这个标志。

因此,我尝试删除Code::Blocks的此标志,然后正确链接。

我有自己的代码::块!

但是,我仍然不知道为什么这个标志会导致这个链接错误。