• 3773阅读
  • 13回复

[讨论]如何能缩小Qt编译的EXE文件体积呢?(老毛病) [复制链接]

上一主题 下一主题
离线mugua001
 

只看楼主 倒序阅读 楼主  发表于: 2020-12-13
前几天,协助研发同事写一个测试用的EXE程序,只做一项功能,从自身尾部读取若干字节数据,然后再通过http的get发出去。
用Qt做的,GUI静态打包,19MB,最后去掉GUI,还剩下8MB多……用于特殊用途测试,体积越小越好……

最后没办法,只好换成BCB2007,打包500KB。
Qt编码过程,比BCB舒服多了,但…体积…再小点就好了。
离线liulin188

只看该作者 1楼 发表于: 2020-12-14
一看楼主就是老c++了,还在搞C++ Builder
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
离线mugua001

只看该作者 2楼 发表于: 2020-12-14
回 liulin188 的帖子
liulin188:一看楼主就是老c++了,还在搞C++ Builder
 (2020-12-14 13:40) 

惭愧,我非专业开发人员。这次是协助研发小伙伴打酱油。

不得不说,C++builder的编译质量,确实牛X。静态编译的EXE文件体积小。

还是这个功能,我用CodeBlocks(+mingw),静态编译出来是1.7MB。也比CBuider大了几倍。
离线XChinux

只看该作者 3楼 发表于: 2020-12-14
那.pro里加CONFIG -= qt
不要加Qt库好了,C++ main里写段程序读文件末尾数据再WinExec或ShellExecute调用wget.exe将数据发出去。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线mugua001

只看该作者 4楼 发表于: 2020-12-14
回 XChinux 的帖子
XChinux:那.pro里加CONFIG -= qt
不要加Qt库好了,C++ main里写段程序读文件末尾数据再WinExec或ShellExecute调用wget.exe将数据发出去。 (2020-12-14 16:24) 

不错,这个思路,我回来测试一下。
离线clickto

只看该作者 5楼 发表于: 2020-12-14
回 mugua001 的帖子
mugua001:惭愧,我非专业开发人员。这次是协助研发小伙伴打酱油。
不得不说,C++builder的编译质量,确实牛X。静态编译的EXE文件体积小。
....... (2020-12-14 14:15) 

不带vcl库,只有500k?
离线圣域天子

只看该作者 6楼 发表于: 2020-12-15
可惜vcl的质量太差,bug太多了。
离线mugua001

只看该作者 7楼 发表于: 2020-12-16
回 clickto 的帖子
clickto:不带vcl库,只有500k? (2020-12-14 22:11) 

带VCL,一个小窗口,一个Memo,几个按钮。用CB2007静态编译完之后580+KB;
离线mugua001

只看该作者 8楼 发表于: 2020-12-16
回 XChinux 的帖子
XChinux:那.pro里加CONFIG -= qt
不要加Qt库好了,C++ main里写段程序读文件末尾数据再WinExec或ShellExecute调用wget.exe将数据发出去。 (2020-12-14 16:24) 

代码中用了Qt的专属类(库),去年了,编译不成。
离线hitler++

只看该作者 9楼 发表于: 2020-12-16
用C + winapi


path = getmodulefilename
file = fopen(path,"rb");
fseek(file,GetFileSize() - 要读取的几个字节)
fread(....,几个字节)
InternetOpenUrl(url + 自己个字节)

mingw编译小于10K, vc6 编译只有4KB,编译时候加几个区段优化选项,能把最终exe文件缩小到600字节左右,并且还能再XP上运行,这功能简单其实可以纯汇编实现,体积能够缩小到小于500字节

离线mugua001

只看该作者 10楼 发表于: 2020-12-16
回 hitler++ 的帖子
hitler++:用C + winapi
path = getmodulefilename
file = fopen(path,"rb");
....... (2020-12-16 08:45) 

我尝试过Codelite(mingw8.10)加 -static编译过,1M多。好像是1.6M。在winxp虚拟机上编译的。
离线fsu0413

只看该作者 11楼 发表于: 2020-12-16
所以要小还是原生win32api吧,Qt自身作为程序框架还是满足不了你
离线272064949

只看该作者 12楼 发表于: 2020-12-18
HA_UPXShell  有个软件,可以对exe文件进行去壳压缩
静态编出的qt程序,8m大小的可以压到2m左右吧.
还想再小可以试试qt4.8。
离线mugua001

只看该作者 13楼 发表于: 2020-12-18
回 272064949 的帖子
272064949:HA_UPXShell  有个软件,可以对exe文件进行去壳压缩
静态编出的qt程序,8m大小的可以压到2m左右吧.
还想再小可以试试qt4.8。 (2020-12-18 17:27) 

Qt4.8的的体积小是吧?我试试。
快速回复
限100 字节
 
上一个 下一个