如何解决:未定义引用“非虚拟重击……”

时间:2018-10-10 02:22:29

标签: c++ hyperlink

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

How to troubleshoot: undefined reference to `non-virtual thunk to ...`

我在Windows上使用mingw32构建code :: blocks。 我在链接步骤中收到错误,这是我的链接命令:

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&)

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

1 个答案:

答案 0 :(得分:0)

我搜索了许多有关此错误的信息,并从本文(中文版)中得到了一些提示:

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

因此,我回想起了构建Code :: Blocks的步骤,发现为另一个错误链接添加了一个标志。标志是:

_GLIBCXX_USE_CXX11_ABI=0

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

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

我有自己的代码::: Blocks!

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