Windows10下wxWidgets 3.1.0+Code::Blocks编译报错求助
解决Code::Blocks中wxWidgets 3.1.0编译链接失败问题
这问题我之前帮朋友排查过,核心是版本不匹配加上Code::Blocks项目配置没跟上你编译wxWidgets的参数,一步步来解决:
第一步:搞清楚库文件版本不匹配的核心问题
你编译的是wxWidgets 3.1.0,而且用了SHARED=0 MONOLITHIC=1 UNICODE=1参数,生成的库文件名应该是:
- Debug版:
libwxmsw31ud.a(末尾的d代表Debug,31对应3.1.0版本) - Release版:
libwxmsw31u.a
但你的项目构建日志里找的是wxmsw30u——这是wxWidgets 3.0.x系列的库名,完全对不上!这是导致链接报错的直接原因。
第二步:修正Code::Blocks项目的链接配置
打开你的testwx项目,按以下步骤调整:
- 点击顶部菜单栏的Project → Build options
- 先处理Debug配置:
- 切换到Linker settings标签,删除现有所有wx相关的库(
wxmsw30u、wxpng等) - 添加新的链接库:
wxmsw31ud(因为你用了MONOLITHIC=1,单库已经包含所有依赖,不需要再加png/jpeg等库) - 确认Link search directories里是
C:\wxWidgets-3.1.0\lib\gcc_lib
- 切换到Linker settings标签,删除现有所有wx相关的库(
- 再处理Release配置:
- 同样到Linker settings,删除旧的wx库,换成
wxmsw31u(没有末尾的d) - 链接搜索路径保持和Debug一致
- 同样到Linker settings,删除旧的wx库,换成
第三步:调整编译器的预处理器与包含路径
还是在Build options窗口里:
- 针对Debug配置:
- 切换到Compiler settings → #defines,添加
wxDEBUG_LEVEL=1,同时确认已有__WXMSW__、wxUSE_UNICODE - 到Search directories → Compiler,确保包含:
C:\wxWidgets-3.1.0\includeC:\wxWidgets-3.1.0\lib\gcc_lib\mswud(末尾的ud对应Debug+Unicode+静态库的头文件)
- 切换到Compiler settings → #defines,添加
- 针对Release配置:
- 到**#defines**,确保没有
wxDEBUG_LEVEL,保留__WXMSW__、wxUSE_UNICODE - 编译器搜索路径换成:
C:\wxWidgets-3.1.0\includeC:\wxWidgets-3.1.0\lib\gcc_lib\mswu(末尾的u对应Release+Unicode+静态库的头文件)
- 到**#defines**,确保没有
第四步:解决创建项目时的配置检测错误
如果以后新建wx项目不想再遇到检测失败提示,给Code::Blocks配置全局wx变量:
- 打开Code::Blocks → Settings → Global variables
- 点击New,变量名设为
wx,然后填写:- Base:
C:\wxWidgets-3.1.0 - Lib:
C:\wxWidgets-3.1.0\lib\gcc_lib - Include:
C:\wxWidgets-3.1.0\include
- Base:
- 下次新建wx项目时,一定要选和你编译参数完全匹配的选项:
- 勾选Unicode、Static Library、Monolithic
- 版本选择3.1.x
额外检查项
- 确认你编译wxWidgets用的MinGW就是Code::Blocks自带的那个!你把
C:\Program Files (x86)\CodeBlocks\MinGW\bin加到Path的操作是对的,确保mingw32-make调用的是Code::Blocks的MinGW,避免编译器版本不兼容。 - 去
C:\wxWidgets-3.1.0\lib\gcc_lib目录看看,有没有libwxmsw31ud.a和libwxmsw31u.a这两个文件,如果没有,说明之前的编译没成功,得重新执行编译命令并确保过程无报错。
内容的提问来源于stack exchange,提问作者MrSudden
相关产品推荐
相关产品推荐

