2016-05-17 113 views
0

我的应用程序需要一个12 MB的文本文件作为内置资源。我惊讶地发现由此产生的可执行文件有点超过了12 MB,所以我在命令行尝试zip,它只降低了68%,低于70%的阈值。Qt资源系统rcc选项和bz2?

bz2使其缩小。有没有一种方法可以使用该压缩,或者更好的方法?我确定纯文本文件用于压缩非常好。

我不清楚如何降低Makefile中的'阈值'。 rcc -h说:

--threshold <level> Threshold to consider compressing files. 

所以这会转化为--threshold="70%"

+0

这是Qt编码器抱怨缺乏合适的压缩API的地方。 'qCompress'不算。 –

回答

0

首先,documentation-threshold标志:

指定的阈值水平(以百分比表示)决定是否压缩文件时使用。如果文件大小的减少大于阈值级别,则将其压缩;否则,存储未压缩的数据。默认阈值为70%,这意味着压缩文件的原始大小的30%或更少被存储为压缩数据。

根据读取,您有两种选择:使用默认zlib压缩并手动设置阈值,或者自己设置压缩级别。

为了提高压缩级别最大:

rcc -level 9 ... 

或提高压缩阈值只是足够:

rcc -threshold 35% ... 

您可以将二者结合起来,当然。默认的压缩级别是-1,这意味着zlib决定压缩的程度。

编辑:讨论压缩时,文档本身矛盾(或者可能根本不清楚)。 Here它采用积分值,而不是为-threshold标志的百分比:

rcc -compress 2 -threshold 3 

一些测试要求。

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',但结果却没有什么不同。

+0

立即获取。像'rcc -threshold 50 -binary res.qrc -o res.bin'或'rcc -threshold 50 res.qrc -o res.cpp'这样的命令按照需要工作。再次感谢。 –