Linux下Code::Blocks使用MinGW交叉编译Windows wxWidgets项目报错
问题原因与解决方案
根本原因
你的MinGW交叉编译配置混入了Linux原生wxWidgets(GTK版)的编译参数,两类平台的wx配置冲突导致报错,核心问题出在Code::Blocks的项目构建配置:
- 编译参数中同时存在GTK版wx的头文件路径
/usr/lib/x86_64-linux-gnu/wx/include/gtk3-unicode-3.0、/usr/include/wx-3.0和MinGW版wx的头文件路径,同时定义了平台互斥的宏__WXGTK__和__WXMSW__ - 链接参数中同时链接了Linux原生的GTK版wx库
libwx_gtk3u_xxx.so和MinGW的库路径,完全不符合交叉编译的要求
你看到的头文件检查#error、运算符重载冲突都是两类平台wx的宏定义、头文件声明冲突导致的。另外你在config.log中看到的报错是configure脚本做系统特性检测时的正常输出,属于自动检测的预期行为,不代表你交叉编译安装的wxWidgets本身有问题。
解决步骤
- 打开Code::Blocks对应项目的「构建选项」,切换到MinGW交叉编译器对应的构建配置
- 在「编译器设置 -> 其他选项」中,将原有调用默认
wx-config --cflags的配置,替换为交叉编译版wx的wx-config路径:/usr/i686-w64-mingw32/bin/wx-config --cflags --static - 在「链接器设置 -> 其他选项」中,将原有调用默认
wx-config --libs的配置,替换为:/usr/i686-w64-mingw32/bin/wx-config --libs --static - 手动检查编译器「包含路径」和链接器「库路径」,删除所有指向系统原生wx路径的条目(如
/usr/include/wx-3.0、/usr/lib/x86_64-linux-gnu等) - 清理项目原有构建缓存(删除obj、bin目录下的旧文件)后重新构建即可
内容的提问来源于stack exchange,提问作者hennep
相关产品推荐
相关产品推荐

