从事PHP有将近两年了,一直都是网页,想自己做个窗口程序玩玩。
有一些c/c++的基础,想搞一个跨平台的,开始想搞QT,但想想前景好像不太好,诺基亚都差不多了。
最后绝定玩下wxwidgets
首先从网上下载个IDE,codelite这个好像是专门为wxwidgets设计的,于是果断安装之。
我安装是最全的版本,就是全有的那种。安装好后创建一个demo运行,会有很多的报错。基本是说找不到文件的。
在网上查,设置了environment variables等很多资料,本地是可以跑了,但把exe传到别电脑会发依赖文件的问题。
解除对*.dll动态链接库的方法:使用静态编译方式重新编译wxWidgets 我专门去wxWidgets主页下了新一点的wxWidgets 2.8.12源码来测试了一下。
我这里将wxWidgets 2.8.12源码安装到了 D:\wxWidgets-2.8.12 编译: ① 打开cmd控制台,将MinGW-4.4.1目录下面的mingwvars.bat拖到cmd里,运行一下。 这里是配置gcc的PATH,或者手动输命令:
Set PATH=D:\CodeLite\MinGW-4.4.1\bin;%PATH%
D:\CodeLite\MinGW-4.4.1是MinGW安装路径,这样配置好PATH。 ② 设置wxWidgets-2.8.12的编译配置文件: D:\wxWidgets-2.8.12\build\msw\config.gcc 打开这个文件,默认设置是这样的:
# What type of library to build? [0,1] SHARED ?= 0
# Compile Unicode build of wxWidgets? [0,1] UNICODE ?= 0
# Type of compiled binaries [debug,release] BUILD ?= debug
# Version of C runtime library to use. You can change this to
# static if SHARED=0, but it is highly recommended to not do # it if SHARED=1 unless you know what you are doing. [dynamic,static] RUNTIME_LIBS ?= dynamic 这几个是编译wx常用的配置选项
第一个是说生成动态链接版wx库或静态版wx库。
第二个是使用Unicode或者不使用。
第三个是编译debug或release版本wx库,通常debug和release库都要编译一遍,因为都要用。调试时一般用debug库,有很多调试信息,程序较大。调试完成,没发现问题了,就用release库发布软件。
第四个是说: 如果SHARED值为0,那么可以将RUNTIME_LIBS设置为static使用静态版本的底层C运行时库。 如果SHARED值为1,那么最好不要更改RUNTIME_LIBS ?= dynamic这项。
简单说就是静态链接wx库可以配合底层静态C运行时库(MinGW C 运行时库)或底层动态C运行时库; 动态链接动态链接动态链接动态链接wxwxwxwx库应该只和底层动态库应该只和底层动态库应该只和底层动态库应该只和底层动态CCCC运行时库运行时库运行时库运行时库((((MinGW C MinGW C MinGW C MinGW C 运行时库运行时库运行时库运行时库))))一起使用一起使用一起使用一起使用。。。。 在(1)中CodeLite默认就是使用动态wx库配合底层动态C运行时库的,所以默认需要两个依赖:wxmsw28u_gcc_custom.dll和mingwm10.dll
③ TDM-GCC编译静态的wxWidgets库 我编译了Unicode版本的Debug和Release版本静态库。Debug版的config.gcc配置项: SHARED ?= 0 UNICODE ?= 1 BUILD ?= debug RUNTIME_LIBS ?= dynamic ************************************* 在①里的cmd控制台下:
cd /d D:\wxWidgets-2.8.12\build\msw\ mingw32-make -f makefile.gcc 然后等待编译完成。Debug版静态库生成后,再改config.gcc SHARED ?= 0 UNICODE ?= 1 BUILD ?= release RUNTIME_LIBS ?= dynamic ****************************** 在控制台再来一遍编译: mingw32-make -f makefile.gcc 然后等待编译完成。这样debug和release静态库就都完成,可以用了。 静态库生成后只有\lib\gcc_lib\目录,只有*.a文件,就是静态库,没有gcc_dll目录。
④测试新的静态的wxWidgets库 用这debug和release两个版本测试了一下。 由于使用由于使用由于使用由于使用TDMTDMTDMTDM----GCCGCCGCCGCC库库库库,,,,默认就是使用底层静态默认就是使用底层静态默认就是使用底层静态默认就是使用底层静态CCCC运行时库运行时库运行时库运行时库,和上层wx静态库一起使用。 考虑config.gcc里的配置项: RUNTIME_LIBS ?= dynamic 由于TDM-GCC默认使用静态库的特性,当SHARED ?= 0时上面那句其实失效,默认为static了。 测
试了个最简单的对话框,代码使用codelite自动生成的对话框代码测试一把。
CodeLite如果要换wxWidgets的库,要设置两处:
第一处::::
Settings菜单-->Environment Variables: Environment Variables对话框中,把WXWIN路径改成新的:D:\wxWidgets-2.8.12 并把PATH和WXCFG里的gcc_dll改成gcc_lib。
第二处:
Settings菜单-->Tags Settings: 在Tags Options对话框里,选中左边Include Files,把老版的wx\include目录删掉, 上面列表加上新的:D:\wxWidgets-2.8.12\include 下面列表加上新的:D:\wxWidgets-2.8.12\include\wx\univ D:\wxWidgets-2.8.12\include\wx\unix
然后重启CodeLite。。。。