我使用CImg库为我创建的图像编辑软件编写插件。 问题是当我包含CImg时,插件的大小从200kb爆炸到2Mb! 但在这种特殊情况下,我只使用5%的CImg代码!
所以我的问题是:有没有办法在编译时删除不必要的代码,所以最终的可执行文件不会膨胀?
(我使用Qt 4.8.0和最新的CImg,Qt Creator和MacOS Lion)。
编译/链接标志: QMAKE_CXXFLAGS + = -Os -fdata-sections -ffunction-sections LIBS + = -Wl --gc-sections
答案 0 :(得分:2)
确保使用完全优化(或仅-Os
进行大小优化)并使用strip -s
剥离调试符号进行编译。这可能会占用很多空间。
同样可能的是,当你只使用5%的CImg代码时,你使用的5%是在内部使用其他95%。您可以做的最好的事情就是优化和去除调试符号。
答案 1 :(得分:1)
根据gcc documentation,当-flto选项与-fuse-linker-plugin或-fwhole-program选项结合使用时,gcc可以通过dead code elimination删除未使用的非静态函数。
Clang supports link time optimization,可以删除链接文件中未使用的非静态函数。
答案 2 :(得分:0)
第一个也是最明显的:你有没有删除调试信息?尝试命令
strip -s <program>
此外,使用-Os进行编译可能会有所帮助。