Code::Blocks开发wxWidgets程序指南

编译错误

缺少支持库

C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `OpenThemeData@8'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `GetThemeColor@20'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `CloseThemeData@4'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `CloseThemeData@4'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `CloseThemeData@4'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `OpenThemeData@8'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `GetThemeBackgroundContentRect@24'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `CloseThemeData@4'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `OpenThemeData@8'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `GetThemeBackgroundContentRect@24'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `IsThemeBackgroundPartiallyTransparent@12'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `DrawThemeParentBackground@12'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `DrawThemeBackground@24'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `CloseThemeData@4'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `LresultFromObject@12'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `CloseThemeData@4'|
C:\wxWidgets-3.1.3\lib\gcc_lib\libwxmsw31u_core.a(corelib_window.o):window.cpp|| undefined reference to `CloseThemeData@4'|

  采用静态库来构建时,Code::Blocks不会自动包含libuxtheme.a和liboleacc.a两个库,导致编译出错。解决方法如下:

单击Project
单击Buid options...
单击Linker Settings
手动输入加入libuxtheme.a和liboleacc.a两个库
PrintTree中的Debug和Release都要添加两个库

构建支持库

本地编译

  首先,在官网下载任意版本的源代码,根据个人喜好将其解压或安装到相关目录。其次,要完成本地编译需要以命令行的形式完成,所以需要安装编译器并将其根目录配置到系统环境变量中。由于Code::Blocks使用的是gcc编译器,所以本文介绍的方法是使用gcc进行本地编译的方法。
  进入到启动命令行程序,将当前文件夹位置定位到:%源代码文件夹%/build/msw/
  编译过程总共分为三步,分别是清理和整理文件、编译发行版本和编译调试版本。第二和第三条命令之间没有关联,顺序可以颠倒。第二和第三条命令中的参数根据需要进行设置,常用参数总共有四个个,分别为:

  • BUILD
  • BUILD=release表示编译发行版本。调试版本编译后会创建带有“d”后缀的库,例如“libwxmsw30d.a”、“wxmsw30d_gcc_custom.dll”,同时会在输出文件夹中创建”mswd” 或者 “mswud” 文件夹。
  • BUILD=debug表示编译调试版本。发行版本编译后创建的库不带有“d”,例如“libwxmsw30.a”、“wxmsw30_gcc_custom.dll”,同时会在输出文件夹中创建”msw” 或者 “mswu” 文件夹。
  • MONOLITHIC
  • MONOLITHIC=1表示编译后创建一个单一的库。编译速度较快,而且在开发的时候构建工程比较简单,不会涉及到组件库的添加,但是开发后的应用会相对比较大,因为里面会有一些与本应用无关的程序。
  • MONOLITHIC=0表示编译后创建多个组件库。编译速度较慢,在开发时构建工程时需要添加各种组件库,但是由于无用的库不会出现在工程中,所以开发后的应用会比较小。
  • SHARED
  • SHARED=1时表示构建动态库。构建静态库编译后会生成“.a”文件,例如:“libwxmsw30d.a”、“libwxmsw28.a”,同时在lib文件夹中创建gcc_lib文件夹作为输出文件夹,所有编译好的库都会放入该文件夹中。使用该库开发程序时,链接器可以直接读取“.a”文件,将程序链接到一个可执行文件中。
  • SHARED=0时表示构建静态库。构建动态库编译后会生成“.dll”文件,例如:“wxmsw30d_gcc_custom.dll”、“wxmsw30_gcc_custom.dll”,同时在lib文件夹中创建gcc_dll文件夹作为输出文件夹,所有编译好的库都会放入该文件夹中。使用该库开发程序时生成的可执行文件较小,实现程序的全部功能需要借助“.dll”文件,但多个可执行文件可以使用同一个“.dll”文件。由于程序需要“.dll”文件,所以在部署该类程序时需要同时部署多个文件。
  • UNICODE
  • UNICODE=1时表示字符编码使用UNICODE。UNICODE=1时编译完成后会在输出文件夹中创建”mswu” 或者 “mswud” 文件夹。
  • UNICODE=0时表示字符编码使用ANSI。UNICODE=0时编译完成后会在输出文件夹中创建”msw” 或者 “mswd” 文件夹。

  例:

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

  三条指令全部执行完毕需要等待一段时间。

官方下载

  如果想省掉本地编译的复杂操作和长时间的等待可以直接在官网下载已经编译好的库文件,但官方只提供多组件的、动态的、UNICODE编码的库。
  下载的库文件要和开发程序所使用的编译器相匹配。首先查看本地编译器的版本,其次查看编译器是32位版还是64位版,在下载时选择与以上两个条件相匹配的库。尤其需要注意的是,32位版或64位版指的是编译器的版本并不是CPU是32位还是64位。
  官方针对每一种特定的编译器提供两版库文件,分别是Development版和Release版。Development版库中包含发行版和调试版库文件;Release版库中只包含了发行版库文件。Code::Blocks创建的工程中都有发行版和调试版两种程序,所以需要下载Development版库。
  除了下载库文件还需要下载头文件,即下载对应编译器的“Header files”。
  将下载好的库文件和头文件解压到同一个文件夹中,然后将lib文件夹中的子文件夹更名为“gcc_dll”。至此支持库的搭建就完成了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值