我有一些巨大的c ++项目,所有这些项目都是用msvc 2010编译的。 我希望DLL文件更小, 谁能给我一些启发?
答案 0 :(得分:1)
编译发布,使用链接时间代码生成(LTCG),删除未使用的引用(OPT:ICF),将CRT放入DLL中。除非必要,否则不要从DLL导出内容。
答案 1 :(得分:1)
除了其他答案之外,您还可以使用upx
压缩dll或其他压缩程序。
答案 2 :(得分:0)
除上述建议外,请确保在项目属性 - > C / C ++ - >赞成大小或速度,支持小代码(/ Os)被选中。
答案 3 :(得分:0)
编译为发布,而不是调试。
动态链接MSVCRT而不是静态链接。这意味着您可能必须使用您的程序分发MSVCRT DLL。根据程序的结构,更改CRT的链接可能会产生意想不到的副作用。
删除所有不需要的代码。使用分析或代码覆盖工具来识别似乎没有被调用的代码。您可以将其删除。
查看每个.c或.cpp文件的所有相应.obj文件。如果任何一个obj文件相对于代码文件的大小过大,那可能会提示某些内容可以减少。
最大限度地减少DLL中全局实例或全局数据的使用。二进制大小将按声明的全局变量的字节数膨胀。
仅导出导入其他EXE和DLL所需的极少数功能。运行“dumpbin / exports yourfile.dll”以获取导出函数的列表。仅导出依赖于DLL的代码直接调用的函数。如果要导出DLL外部没有人直接调用的东西,请不要导出它。如果内部没有任何内容调用它,链接器将优化它(并且它的依赖)。
不要导出整个C ++类。如果您的DLL是C ++代码,则导出简单的C包装函数。