从wxdevcpp到code:block(二)

        由于原来的wxdevcpp为我们配置好了所有东西:IDE、编译器、库文件、RAD;而相比之下采用code:block(以下简称为C:B)作为IDE的开发环境却需要我们手动配置其他的所有东西。

        打个不太恰当的比喻:前者是傻瓜照相机,你只要简单地按下快门就可以拍出像样的照片,但是自由度很小,拍出来的照片质量一般;后者是专业的单反相机,镜头需要自己配,焦距要自己调,曝光时间要自己定,操作复杂,但是会给使用者提供很大的空间,满足各种需求,弄得好的话还能拍出高水平的相片。

       用C:B作为IDE有下面两套方案可供选择:

      IDE:C:B,编译器:MingW,库:由wx源代码编译得来;
      IDE:C:B,编译器:MingW,库:由wxpack安装得来。

      MingW可以理解为在windows下的交叉编译工具。

     网上可以下载到集成MingW的C:B。下载标准的Code:Block和MingW并安装,不过我更推荐下载内部集成MingW的C:B,省去了下载各种MingW组件的麻烦;


1、运行可执行文件出现“没有找到dll(动态链接库)文件”的问题

    在运行可执行文件的时候,发现弹出警告:没有找到wxmsw28ud_gcc.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。

    查阅资料后发现:这是因为在C:B中创建工程时候设置工程选项的时候勾选了use wxwidgets dll——使用了动态链接库文件,所以生成的可执行文件必须要有dll文件才能正常执行。

   对于这种情况,主要有三种解决方法:
a、把缺少的dll文件拷到可执行文件所在的文件目录下,这种方法比较简单,但是有时候dll文件会很大(几十M),而可执行文件本身很小(几M),这显然不实惠,而且可移植性不好;
b、把dll文件的路径添加进计算机的环境变量(用户变量)。这种方法一劳永逸,但是会污染系统的环境变量;
c、干脆就不采用动态链接库,采用静态链接库,把链接库存在可执行文件内,这会导致可执行文件变得比较大,比如:而wxdevcpp生成的可执行文件默认采用静态链接库,相同源代码的程序在两种环境下编译出的可执行文件的大小相差很大(C:B的是1M多,wxdevcpp的是5M多)。

   为了适应嵌入式系统的要求,我打算采用方法3,在建立工程时不勾选use wxwidgets dll,但是在编译的时候报错:undefined reference to `_Unwind_Resume。目前为止还不知道如何解决,想到我用的库是wxpack安装得来的,猜测是由于wxpack不支持dll引起的。

    所以我打算采用以MingW编译wxwidgets2.9的源代码以生成库。查了网上的方法,归纳如下:

1、首先需要下载wxwidgets的最新源代码;
2、然后下载MingW,我推荐安装C:B的时候就安装内部集成MingW的C:B,省去了下载安装各种MingW组件的麻烦;
3、找到MingW文件夹(我的MingW的路径是D:\Program Files\CodeBlock\MinGW),新建一个批处理文件:setvar.bat,内容是:set path=MingW的路径\bin;%path%;
4、打开C:B,Settings->Compiler and debugger->Toolchain executables,将Make program改成mingw32-make.exe;
5、用win+R打开运行,输入cmd打开命令提示符,先转到setvar.bat所在目录,运行setvar.bat,然后转到C:\wxWidgets-2.9.2\build\msw,然后输入以下命令:mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release;其中如果要求支持动态链接库,将SHARED=1改成SHARED=0;如果要求不支持UNICODE编码,将UNICODE=1改成UNICODE=0;如果要求编译成调试版本,将BUILD=release(发行版本)改成BUILD=debug;
6、等很长时间,大于30分钟能编译完成。

然后再C:B中配置好库和变量就能够实现静态链接库了,不过mingwm10.dll这个文件还是需要放入环境变量中或者拷过来的,但是这个文件比较小,只有十几K。

 

2、出现类似于”wx/setup.h: No such file or directory”问题
采用自己编译的wx库编译完成之后出现类似于”wx/setup.h: No such file or directory”报错,上网查了以后发现:工程名右键菜单->build options->Search directories->Compiler显示的是C:\wxWidgets-2.9.2\lib\gcc_lib\mswud,但是资源管理器显示不存在这个文件夹,只存在C:\wxWidgets-2.9.2\lib\gcc_lib\mswu文件夹,原因是用MingW编译wxwidgets源代码的时候选择的是发行版本,所以所得的库是没有debug的,而在建立工程的时候又勾选了Creat"Debug"configuration,要求程序有debug。
因此有以下几种方法解决该问题:
a、将C:\wxWidgets-2.9.2\lib\gcc_lib\mswud改成C:\wxWidgets-2.9.2\lib\gcc_lib\mswu;
b、编译wxwidgets时候选项BUILD=debug,勾选Creat"Debug"configuration;

 

3、出现不支持汉字显示而报错的问题:

如图,在Complier设置选项中输入-finput-charset=UTF-8即可解决。


 

 

你可能感兴趣的:(从wxdevcpp到code:block(二))