(转)wxWidgets 2.9.2svn(3.x)最小体积编译方法
官方论坛、网上记录的wxWidgets编译方法,会导致编译后的程序库非常大,原因在于对编译的方法选择不当。
下面简单总结一下如何编译最新的SVN代码。
下载最新源码(每日构建):http://biolpc22.york.ac.uk/pub/Daily_HEAD/
或者使用subversion检出:http://www.wxwidgets.org/develop/svn.htm
准备工作:
1. 删除include/wx/msw/setup.h(如果该文件已经存在)
2. 修改setup0.h,设置以下宏的值为 0 !
WXWIN_COMPATIBILITY_2_8
wxUSE_EXCEPTIONS
注:我将 wxUSE_EXCEPTIONS 这一选项设置为0以后使用gcc编译器不能成功编译,不知为何?
GCC版本:
修改makefile.gcc文件:区分大小写搜索"_gcc",替换成""
mingw32-make -f makefile.gcc CPPFLAGS="-Os -pipe -mthreads" CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden -Wno-attributes" LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -s" SHARED= BUILD=debug UNICODE= DEBUG_INFO= DEBUG_FLAG= MONOLITHIC= USE_EXCEPTIONS= USE_RTTI= OFFICIAL_BUILD= RUNTIME_LIBS=static
mingw32-make -f makefile.gcc CPPFLAGS="-Os -pipe -mthreads" CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden -Wno-attributes" LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -s" SHARED= BUILD=release UNICODE= DEBUG_INFO= DEBUG_FLAG= MONOLITHIC= USE_EXCEPTIONS= USE_RTTI= OFFICIAL_BUILD= RUNTIME_LIBS=static
mingw32-make -f makefile.gcc CPPFLAGS="-Os -pipe -mthreads" CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden -Wno-attributes" LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -s" SHARED= BUILD=debug UNICODE= DEBUG_INFO= DEBUG_FLAG= MONOLITHIC= USE_EXCEPTIONS= USE_RTTI= OFFICIAL_BUILD= RUNTIME_LIBS=static
mingw32-make -f makefile.gcc CPPFLAGS="-Os -pipe -mthreads" CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden -Wno-attributes" LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -s" SHARED= BUILD=release UNICODE= DEBUG_INFO= DEBUG_FLAG= MONOLITHIC= USE_EXCEPTIONS= USE_RTTI= OFFICIAL_BUILD= RUNTIME_LIBS=static
VC版本:
修改makefile.vc文件:区分大小写搜索"_vc",替换成""
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=debug SHARED= UNICODE= DEBUG_INFO= DEBUG_FLAG= MONOLITHIC= USE_EXCEPTIONS= USE_RTTI= OFFICIAL_BUILD= RUNTIME_LIBS=static
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=release SHARED= UNICODE= DEBUG_INFO= DEBUG_FLAG= MONOLITHIC= USE_EXCEPTIONS= USE_RTTI= OFFICIAL_BUILD= RUNTIME_LIBS=static
VC静态版:
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=release SHARED= UNICODE= DEBUG_INFO= DEBUG_FLAG= MONOLITHIC= USE_EXCEPTIONS= USE_RTTI= OFFICIAL_BUILD= RUNTIME_LIBS=static
大家在编译时,可以视情况调整选项,由于我在编译wxWidgets时,习惯一个工程要同时兼容VC和GCC编译器,而且一些小程序,喜欢在最终发布时使用静态链接发布的方法,所以才有了上面的三个版本。
通过这些选项,可以最大程度的减小生成的库的大小,以及静态链接要执行文件的大小。
你便会发现,其实通过适当的方法,是可以尽量的减小wxWidgets生成库的大小的。
以今天的svn源码为例:
(GCC版)wxmsw292u.dll 6.65MB
(VC版)wxmsw292u.dll 6.66MB
静态版可执行文件:
(GCC版)2.01MB
(VC版)1.31MB
其中两个选项:USE_EXCEPTIONS=0 USE_RTTI=0由于在wxWidgets库中不使用RTTI和异常,这会大幅度减小可执行文件的体积(减小30%左右),取消这两个选项,只能说明在wx库中不再支持RTTI和异常,但不代码你基于wx的程序中不能使用RTTI和异常!
至于这两个开关是否导致wx的功能缺少,这我目前还没有查找到任何依据。
不过,官方的wiki是支持这种做法的:http://wiki.wxwidgets.org/Reducing_Executable_Size
可以确定的是:使用VC编译器对最终程序的发行,无论是程序体积、还是速度,都明显优于GCC(MinGW)。
基于wxWidgets开发的朋友,如果要在Windows平台上发布程序,建议使用VC。
说明:
- VC编译器在优化体积的其他一些做法,例如/ALIGN、 /MERGE选项,通过实践证明,不但不能减小wxWidgets编译后的二进制体积,反而起到相反的效果。
- 以上测试只在Windows平台测试通过,并未在Linux平台进行验证。
转载说明:该文章转载自老邓的CSDN博客,版权归原作者所有。
(转)wxWidgets 2.9.2svn(3.x)最小体积编译方法的更多相关文章
- OTG 接口烧写最小Linux的方法
通过该方式可以烧写Android4.0.3 系统和Linux-QT 系统. 需要准备一根OTG 线,绝大多数智能手机和PC 机相连接的线都是OTG线,都是通用的. 这种方式比TF卡烧写方式要快一些,我 ...
- CentOS 6.0最小化编译安装Nginx+MySQL+PHP+Zend
http://www.osyunwei.com/archives/235.html 引言: 操作系统:CentOS 6.0 32位 下载地址:http://mirrors.163.co ...
- 解决ie6支持最大高度最小高度的方法
1.IE6支持max-height解决方法 IE6支持最大高度解决CSS代码:.yangshi{max-height:1000px;_height:expression((document.docum ...
- 有向图最小路径覆盖方法浅析、证明 //hdu 3861
路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联. 对于一个有向无环图怎么求最小路径覆盖? 先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii. ...
- Mysql Group by 分组取最小的实现方法
表结构如下图:
- 腾讯物联网操作系统正式开源,最小体积仅1.8 KB
9月18日,腾讯宣布将开源自主研发的轻量级物联网实时操作系统TencentOS tiny.相比市场上其它系统,腾讯TencentOS tiny在资源占用.设备成本.功耗管理以及安全稳定等层面极具竞争力 ...
- ShellCode 最小化编译优化
1.生成ShellCode [root@localhost ~]# msfvenom -a x86 --platform Windows \ > -p windows/meterpreter/r ...
- wxWidgets 的 Linux / Windows 混合开发环境
目标 建立一个开发 GUI 交互界面程序的环境,要求: 以 C/C++ 为主要程序设计语言. 最好能充分利用已有的 MFC 开发经验. 以 Linux 为主要开发环境.可以在 Windows 中编译并 ...
- [zhuan] linux 下 wxWidgets 安装,编译
http://blog.csdn.net/yuzhenxiong0823/article/details/7727133 wxWidgets在Linux下有wxGTK和wxX11供使用,各需要GT ...
随机推荐
- Redis技术分享
环境介绍: 开发环境: spring3+tomcat7+maven3+redis-3.0.7 运行环境: Linux 前言: 项目中引入redis背景: 项目中最初将科目.打印.利润表.资产负债表.现 ...
- 简单介绍关于IOS的生命周期过程
初步了解一下生命周期的过程: 1.通过alloc init 分配内存,初始化controller. 2.loadViewloadView方法默认实现[super loadView]如果在初始化cont ...
- java接收数据接口
1.数据接收接口: 这个可以考虑最简单的Servlet方法,而且效率较高: import java.io.PrintWriter;import java.text.SimpleDateFormat;i ...
- 天方夜谈·数据结构·List
在战场上杀不死的敌人,永远也别想打败他,他就像幽灵横亘在你失败的田地上. 大一下学期,接触到Java程序设计语言,时至今日,才越发觉得知识与技术的海洋是多么多么的浩瀚.......如果说编程语言的一个 ...
- 某次模拟考试day2t3 菊菊的数据结构
[题目描述] 菊菊是一个码农,他很喜欢码一些高(e)级(xin)数据结构. 有一天,菊菊在打网赛时遇到了 wfj.wfj 觉得他很有前途,可以做下一代码农大神. 于是乎,wfj 给菊菊出了一道题,来检 ...
- shell中的Mysql查询
1 #!/bin/bash 2 #查询 3 echo -e 4 for i in `cat id.txt` 5 do 6 A=`mysql -h10 -uw -p2012 -Ne "sel ...
- 自定义list排序
使用扩展方法OrderBy,OrderByDescending,效果优良. 实现代码如下: private static void SortByExtensionMethod() { List< ...
- 关于制作C语言头文件的思考
我们接触的第一个c语言代码是这个: #include<stdio.h> main() { printf("Hello World"); } 这是最简单的c代码,然而,它 ...
- java中使用fastjson、jackson、json-lib解析JSON-------------------妈妈再也不用担心JSON解析
1.fastjson引入包<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjso ...
- js闭包绑定元素
闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状 ...