这里记录了一些自己使用CodeBlocks和wxWidgets编程的说明。
1 CodeBlocks使用说明
1.1 下载wxFormBuilder(根据需要安装)
http://jaist.dl.sourceforge.net/sourceforge/wxformbuilder/wxFormBuilder_v3.0.57.exe
1.2 IDE设置
1.2.1设置编辑器为UTF-8编码
在Settings->Editor->gernal settings->Other settings,将默认保存的文件编码格式设置为UTF-8,如果有的程序文件不是UTF-8,用文本文件打开另存为UTF-8格式,保持两边编码格式相同。
1.2.2 编辑器字体
Setting->Editor->General settings,点击按钮Choose,选择Courier New,11号大小。
1.2.3 编辑器每行最大长度和竖直线
Setting->Editor->Margins and caret,设置最长120字符,显示竖直线。
1.2.4 在IDE中设置wxWidgets环境
要在Settings->Global Variables->Current Variable 增加wx变量指向wxWidgets安装目录,在Base增加D:\CrossPlatform\wxWidgets,变量在创建工程时使用,wxWidgets安装目录如有发生变化,只需更改此处。
$(#wx)\lib\gcc_lib
$(#wx)\include
1.2.5 去掉编辑器出现的下划波浪线
在plugins->Manage plugins,拖动滚动条,找到Spell checker,选中,点击右上方的disable。
1.3 设置自带的MinGW 13.1编译器
1.3.1 设置编译64位程序
在Settings->Compiler->Compiler Settings->#Defines增加:
__GNUWIN64__
__WXMSW__
wxUSE_UNICODE
1.3.2 创建gdb64
要在Settings->Debuger->Create Config创建gdb64。
1.3.3 设置64位编译器
接着点击菜单中Settings->Compiler->Toolchain executables,在这个窗口中如下设置:
1.4 创建wxWidgets工程
1.4.1 新建Project
选择wxWidgets project。
1.4.2 选择wxWidgets版本
选择wxWidgets 3.2(对应安装的wxWidgets版本)。
1.4.3 建立工程名
输入工程名、目录、作者等。
1.4.4 选择GUI Builder
选择GUI Builder选wxSmith;Application Type选Frame或者Dialog。建议选择wxSmith,与IDE结合较紧密。
1.4.5 选择wxWidgets位置
已经设置了显示默认$(#wx);否则选择wxWidgets安装目录。
1.4.6 选择编译器
首选自带的MinGW 13.1编译器GNU GCC MinGW64 Compiler,勾选Debug和Release。
1.4.7 选择wxWidgets编译选项(连接静态库还是动态库)
必须和你编译wxWidgets时所使用的选项一致(如果4种都编译了可以都选择,参见2.2.4和2.2.5小节)!不选择Use wxWidgets DLL,可以编译为不用动态库只有一个EXE文件。注意:工程选择后,在工程设置中没有方法修改使用动态库还是静态库,除非修改工程cbp文件。
注意:编译的是wxWigets静态链接程序时,不要选Use wxWigets DLL及wxWigets is build as a monolithic library(wxWigets是作为一个整体库构建的),编译时会出错,提示jpg,ttf之类的。在Project下的bulid option 中Linker settings添加libwX JPeg.a及libwxtiff.a即可编译。
1.4.8 选择OpenGL
根据需要选择。
1.4.9 编译运行
工程建立后,Resources下选择可进行可视化编辑,如想直接改代码,可切换到Projects下,Build and Run。
1.5 打开工程的一些设置
1.5.1 打开工程后选择编译器
Project->Build options
一般都是选择自带的MinGW 13.1编译器GNU GCC MinGW64 Compiler,除非用了其他的wxWidgets版本,比如5.2节中的TDM-GCC10.3版本。
1.5.2 打开工程后设置输出路径
Project->Properties->Build tarhets
1.5.3 设置编译UNICODE和__UNIX__或者__WXMSW__
Project->Build options->Compiler Settings->#Defines增加:
__GNUWIN64__
__WXMSW__
wxUSE_UNICODE
__GNUWIN32__ # 在编译Windows32位程序时增加
__GNUWIN64__ # 在编译Windows64位程序时增加
wxUSE_UNICODE # 编译时使用UTF-8编码
__WXMSW__ # 在编译Windows程序时增加
__UNIX__ # 在编译Unix、Linux程序时增加
可在Settings->Compiler->Global compiler settings>Compiler settings->Other compiler options添加下列选项:
-fexec-charset=GBK
-finput-charset=UTF-8
1.5.4 打开工程后设置原先连接静态库改为连接动态库
在Settings->Compiler->Compiler Settings->#Defines增加:
WXUSINGDLL
关闭工程文件,到工程文件目录下打开.cbp文件,首先把gcc_lib替换为gcc_dll,接着把所有类似“<Add library="libwxmsw32ud.a" />”全部删除,换为:
<Add library="libwxmsw32ud_core.a" />
<Add library="libwxbase32ud.a" />
然后在下图处增加:
<Add option="-DWXUSINGDLL" />
该设置一般情况下是可用的(很奇怪为啥在IDE不能选择)。
建议:最好重新建立工程。
1.6 连接C++静态库
codeblocks发现编译代码失败,跳出一个ligcc_s_sjli.dll missing。解决方法如下文所述。然后再other linker options 框内粘贴如下语句
-static-libgcc
-static-libstdc++
这样程序拷贝到其他地方运行就不用拷贝libstdc++-6.dll、libgcc_s_seh-1.dll和libgcc_s_sjlj-1.dll(大部分情况下不管用,其实按照上述编译好wxWidgets,建立好工程,一般不会出现)。
2 错误解决
2.1 fatal error: wx/setup.h
win环境上,报错wx/setup.h:No such file or directory时,路径改为wx/msw/setup.h。
到wx的目录下,找到include\wx\platform.h文件,用Codeblocks打开它,用菜单栏的Search->Find功能,找到#include"wx/setup.h"一行(或者根据编译错误提示直接打开定位)。将"wx/setup.h"改为"wx/msw/setup.h",然后保存修改后的platform.h文件即可。
官方给的下载包里的wx.chm帮助文件有这个问题的解决办法意思是说,wx/...目录里根本没有setup.h文件,首先要在platform.h文件里进行配置。格式大致是 #include"wx/XXX/setup.h",而这里的XXX是根据你所用的操作系统的不同而改变的,例如WINDOW下就改成"wx/msw/setup.h",而MacOS就改成"wx/mac/setup.h"。
2.2 cannot find -|wxmsw31u等cannot find
发生以下错误时 cannot find -|wxmsw31u等cannot find提示,修改Project|build options,清空linker setting里的所有,添加wxWidgets\lib\gcc_dll\里需要用到的或所有。
2.3 error converting to execution character set illegal byte
https://blog.csdn.net/qq_46663243/article/details/124531566
编译时报错:error converting to execution character set illegal byte sequence。原因Windows(中文)默认的字符集是Windows-936(GBK),而GCC编译器默认编译的时候是按照UTF-8解析的,当未指定字符集时一律当作UTF-8进行处理。所以要在Settings->Compiler->Global compiler settings->Other options添加,一般情况下不用设置。
-fexec-charset=GBK
-finput-charset=UTF-8