我的应用程序需要一个12 MB的文本文件作为内置资源。我感到惊讶的是,由此产生的可执行文件有点超过12 MB,因此我在命令行上尝试使用zip,它只会降低68%,低于70%的阈值。
bz2缩小它。有没有办法可以使用压缩,或更好的东西?我确定用于压缩的纯文本文件非常好。
我不清楚降低阈值'在Makefile中。 rcc -h
说:
--threshold <level> Threshold to consider compressing files.
那会转换为--threshold="70%"
吗?
答案 0 :(得分:0)
首先,-threshold
标志上的documentation:
指定在决定是否压缩文件时使用的阈值级别(以百分比表示)。如果文件大小的减少大于阈值级别,则将其压缩;否则,存储未压缩的数据。默认阈值级别为70%,这意味着原始大小的30%或更小的压缩文件将存储为压缩数据。
根据读取,您有两种选择:使用默认的zlib压缩并手动设置阈值,或自己设置压缩级别。
将压缩级别增加到max:
rcc -level 9 ...
或者提升压缩阈值 :
rcc -threshold 35% ...
当然,你可以将两者结合起来。默认压缩级别为-1,表示zlib决定压缩程度。
编辑:在讨论压缩时,文档与自身相矛盾(或者可能根本不清楚)。 Here它使用整数值而不是-threshold
标志的百分比:
rcc -compress 2 -threshold 3
需要进行一些测试。
答案 1 :(得分:0)
谢谢你的回答乔恩。我通过在我的文件中添加大量空格来测试。足以让命令行zip报告的通货紧缩达到71%,生成的可执行文件降到4.6 MB,所以理论是正确的。
rcc似乎只生成类似XML的输出,但接受-threshold和-compress选项。没有语法错误报告,任何值似乎都可以接受。
我不确定将阈值选项放在makefile中的哪个位置。引用我的文件的部分:
qrc_meresource.o: qrc_meresource.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_meresource.o qrc_meresource.cpp
我已经尝试在各个地方放置rcc可接受的选项。一切都被拒绝了。
这一行定义了CXXFLAGS:
CXXFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)
我甚至尝试将'COMPRESS = gzip -9f'行更改为'COMPRESS = bzip2 -9f',但结果没有区别。