CodeBlock速配wxWidgets

CodeBlock速配wxWidgets


使用软件版本:

  • CodeBlocks 10.05 自带 mingw32-g++.exe (TDM-2 mingw32) 4.4.1
  • CodeBlocks 12.13 自带 mingw32-g++.exe (TDM-2 mingw32) 4.8.1
  • wxPack_v2.8.7.exe GCC编译版本未知,此包安装后占用空间明显比2.8.12要大(3.10G>1.45G)
  • wxPack_v2.8.12.01.exe 由GCC 4.4.1 编译
  • wxMSW-3.0.2_gcc471TDM_Dev.7z + wxWidgets-3.0.2_headers.7z
  • tdm-gcc 各个实测版本
  • Windows 7 x64 on AMD CPU

动态编译

下载好各版本的 wx 或者是 wxPack_v2.8.7.03,wxPack 包含的库文件较全,要正确编译工程,就需要设置定义以下编译选项,否则配置不正确,就算编译通过也无法运行:

<Add option="-DWXUSINGDLL" />
<Add option="-DwxUSE_UNICODE" />

这两个选项是对应工程向导中的 Use wxWidgets DLL 和 Enabled Unicode 两个选项。

静态编译和合集库

wxPack安装包含动态链接和静态链接两个版本的文件,lib目录下gcc_dll对应动态链接,gcc_lib对应静态连接,这个文件夹也是没有DLL文件的,需要在编译选项中设置好路径指向。gcc_lib目录下就有这四个文件,分別是Unicode和非U版的,特别大的文件:

libwxmswu.a     98MB
libwxmswud.a    99MB
libwxmsw.a      17MB
libwxmswd.a     17MB

编译wx时生成合集库文件,即 Monolithic Library,这也就是要求编译wx时必需指定MONOLITHIC=1,需要静态编译时要指定SHARED=0,这样才能进行静态链接的程序开发,例如:

mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=0 UNICODE=1 BUILD=debug
mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=0 UNICODE=1 BUILD=release

新建wx工程时,在向导界面设置 wxWidgets Library Setting 时,去掉 Use wxWidgets DLL 选项,而选择 Monolithic Library 选项。这样,工程才会以上面列出的链接库来生产程序。

实操测试

测试中发现 Codeblock 10.05 + wxPack_v2.8.12 搭配运行是较稳定的,亦即 g++ 4.4.1 及 g++ 4.5.0 和 wxPack v2.8的组合较好。CodeBlocks 12.13 则和 wxMSM 3.0 搭配使用较好。尽管如此,通过下面的两组测试数据,发现 wxWidgets 的源代码移植问题应该是比较多的,工程质量可能会大受影响。

以下是一组搭配动态链接测试数据:

组合 g++ 4.4.1 g++ 4.6.2 g++ 4.7.1 g++ 4.8.1 g++ 4.9.2 g++ 5.1.0
wxMSW 3.0.2 1 1 OK 2 OK #i 3
wxMSW 3.0 8 7 OK #ii OK 3 3
wxPack2.8.12 OK OK 4 5 4 6

以下是一组搭配静态链接测试数据:

组合 g++ 4.4.1 g++ 4.6.2 g++ 4.7.1 g++ 4.8.1 g++ 4.9.2 g++ 5.1.0
wxPack 2.8.7 OK 10 11 5 11 6
wxPack2.8.12 10 OK i3 10 10 10 6 #10
#1 Error wxbase30u_gcc471TDM.dll 模块问题
#2 Error pthreadGC2.dll 模块的错误
#3 Error 编译错误过多
#4 Error wxbase28ud_gcc.dll模块异常;或 StackHash 模块错误。
#5 Error 正常编译,可以运行,但是进程为僵尸状态,不显示界面不提示错误。
#6 Error 编译错误,提示语法问题。
#7 Error wxbase30u_gcc481TDM.dll、wxbase30ud_gcc481TDM.dll 模块问题。
#8 Error wxbase30u_gcc481TDM.dll 或 程序自身模块问题不能运行,但编译通过无出错。
#9 Error 错误过多,基本是符号引用错误。
#10 Error 符号_Unwind_Resume引用问题,涉及异常处理,包含 libgcc_s.a 亦未解决。
#11 Error 程序自身模块问题不能运行,但编译通过无出错。
#i Info  使用 ISO C++ 2011 ,添加编译参数 -std=c++11 or -std=gnu++11。
#ii Info 编译通过,可以运行,但程序加载有明显延时。
#i3 Info 编译通过,按链接程序提示,添加了一系列系统库文件引用。但静态链接程序带调试文件巨大 30MB+,发行版则为可接受的2.38MB。

可能需要用到的系统库文件引用:

<Add library="libcomctl32.a" />
<Add libra
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值