2010年11月26日 星期五

Using wxWidgets with Code::Blocks, problem's about "Undefined reference to 'vtable for XXXX' "

According to this post, the reason of linking error " Undefined reference to 'vtable for XXXX' " is due to some of the virtual function is not written.  Especial from the inherent one.

But with Code::Blocks, there is another possibility that could leads the problem.  After some research, I discovered a quick to fix the problem, especially the problem is not cause from you but the library.

Code::blocks in Linux may automatically call some program to get config.  For example: run following on the terminal:

$wx-config --libs
-L/usr/local/lib -pthread   -lwx_gtk2u_xrc-2.9 -lwx_gtk2u_html-2.9 -lwx_gtk2u_qa-2.9 -lwx_gtk2u_adv-2.9 -lwx_gtk2u_core-2.9 -lwx_baseu_xml-2.9 -lwx_baseu_net-2.9 -lwx_baseu-2.9 


This is a result from my computer.  According to 'wx-config --help', the default output of this parameter is the basic, standard of the linkers.  In other word, some special library is not included.


Instead using 'wx-config --libs', you may try following:


$wx-cinfig --libs all
-L/usr/local/lib -pthread   -lwx_gtk2u_xrc-2.9 -lwx_gtk2u_stc-2.9 -lwx_gtk2u_richtext-2.9 -lwx_gtk2u_ribbon-2.9 -lwx_gtk2u_propgrid-2.9 -lwx_gtk2u_aui-2.9 -lwx_gtk2u_media-2.9 -lwx_gtk2u_html-2.9 -lwx_gtk2u_qa-2.9 -lwx_gtk2u_adv-2.9 -lwx_gtk2u_core-2.9 -lwx_baseu_xml-2.9 -lwx_baseu_net-2.9 -lwx_baseu-2.9 


Soon you may discovered that the number of the linker has increased.  This is the main reason that cause you mad.


To modify the setting, goto project properties... → Project build options → Linker Setting → Other linker options.

Change 'wx-config --libs' to 'wx-cinfig --libs all', and re-compile the project.