用CodeBlocks编译一个wxWidgets应用程序时,总是出现"undefined reference"。这里有两个问题,一是需要添加wxWidgets相关的库,二是这些库要按一定的顺序列出。
在wxWidgets的lib目录下查找报错的未定义函数,就可以找到那些需要的库。
但是库的排列顺序是有关系的,顺序错误仍会有"undefined reference"报告。如果程序引用了libA.a,libA.a又引用了libB.a,则gcc链接时,库A应排在库B的前面。但是wxWidgets有这么多库文件,如何排列它们的顺序呢?
我利用了CodeBlocks的wxWidgets工程向导,生成一个工程,把所有的库都选上,这样就排出了一个wxWidgets库的顺序。
<Add library="libwxmsw28_richtext.a" />
<Add library="libwxmsw28_xrc.a" />
<Add library="libwxmsw28_dbgrid.a" />
<Add library="libwxbase28_odbc.a" />
<Add library="libwxmsw28_media.a" />
<Add library="libwxbase28_net.a" />
<Add library="libwxmsw28_gl.a" />
<Add library="libwxmsw28_qa.a" />
<Add library="libwxbase28_xml.a" />
<Add library="libwxmsw28_adv.a" />
<Add library="libwxmsw28_html.a" />
<Add library="libwxmsw28_core.a" />
<Add library="libwxbase28.a" />
<Add library="libwxpng.a" />
<Add library="libwxjpeg.a" />
<Add library="libwxtiff.a" />
<Add library="libwxzlib.a" />
<Add library="libwxregex.a" />
<Add library="libwxexpat.a" />
还是有#pragma comment(lib, "XXX.lib")自动链接的好,不必关心这种库依赖性。