Boost.Program_options生成可执行文件体积过大的优化求助
缩减Boost Program Options可执行文件体积的有效方案
问题背景
我编译了一个和boost_1_72_0\libs\program_options\example\first.cpp几乎一致的测试模块boost_program_options_test.cpp,初始编译命令如下:
g++ -std=c++11 -Wall -g -o boost_program_options_test.exe -ID:\temp\boostinst-01\boost_1_72_0\ -LD:\temp\boostinst-01\boost_1_72_0\stage\lib\ boost_program_options_test.cpp -lboost_program_options-mgw81-mt-x64-1_72
编译成功后可正常运行,但生成的可执行文件体积达到了1.9M,对于仅做CLI参数解析的程序来说过于庞大,于是尝试了以下优化步骤来缩减体积。
优化步骤及效果对比
我依次执行了关闭调试信息、开启编译优化、剥离符号表这几个操作,每次操作后的文件体积变化如下:
保留调试信息的初始版本
命令:g++ -std=c++11 -Wall -g -o boost_program_options_test.exe -ID:\temp\boostinst-01\boost_1_72_0\ -LD:\temp\boostinst-01\boost_1_72_0\stage\lib\ boost_program_options_test.cpp -lboost_program_options-mgw81-mt-x64-1_72体积:
1,950,374 字节关闭调试信息(移除
-g参数)
命令:g++ -std=c++11 -Wall -o boost_program_options_test.exe -ID:\temp\boostinst-01\boost_1_72_0\ -LD:\temp\boostinst-01\boost_1_72_0\stage\lib\ boost_program_options_test.cpp -lboost_program_options-mgw81-mt-x64-1_72体积:
1,115,710 字节开启O2级编译优化
命令:g++ -std=c++11 -Wall -O2 -o boost_program_options_test.exe -ID:\temp\boostinst-01\boost_1_72_0\ -LD:\temp\boostinst-01\boost_1_72_0\stage\lib\ boost_program_options_test.cpp -lboost_program_options-mgw81-mt-x64-1_72体积:
753,051 字节剥离可执行文件的符号表(使用MinGW64的strip工具)
命令:strip --strip-all boost_program_options_test.exe体积:
293,888 字节(约287KB)
总结
通过这几步操作,原本1.9M的可执行文件最终被压缩到了不足300KB,完全符合轻量CLI工具的体积预期。核心优化点包括:
- 移除调试信息(
-g参数会添加大量调试符号) - 开启编译优化(
-O2会在不影响功能的前提下对代码进行压缩和优化) - 剥离符号表(
strip工具移除程序运行不需要的符号信息)
内容的提问来源于stack exchange,提问作者Nick Legend
相关产品推荐
相关产品推荐

