如何使用MSVC ++ 2010减小dll?

时间:2013-09-17 03:23:53

标签: c++ visual-c++ compiler-construction

我有一些巨大的c ++项目,所有这些项目都是用msvc 2010编译的。 我希望DLL文件更小, 谁能给我一些启发?

4 个答案:

答案 0 :(得分:1)

编译发布,使用链接时间代码生成(LTCG),删除未使用的引用(OPT:ICF),将CRT放入DLL中。除非必要,否则不要从DLL导出内容。

答案 1 :(得分:1)

除了其他答案之外,您还可以使用upx压缩dll或其他压缩程序。

http://upx.sourceforge.net/

答案 2 :(得分:0)

除上述建议外,请确保在项目属性 - > C / C ++ - >赞成大小或速度支持小代​​码(/ Os)被选中。

答案 3 :(得分:0)

  1. 编译为发布,而不是调试。

  2. 动态链接MSVCRT而不是静态链接。这意味着您可能必须使用您的程序分发MSVCRT DLL。根据程序的结构,更改CRT的链接可能会产生意想不到的副作用。

  3. 删除所有不需要的代码。使用分析或代码覆盖工具来识别似乎没有被调用的代码。您可以将其删除。

  4. 查看每个.c或.cpp文件的所有相应.obj文件。如果任何一个obj文件相对于代码文件的大小过大,那可能会提示某些内容可以减少。

  5. 最大限度地减少DLL中全局实例或全局数据的使用。二进制大小将按声明的全局变量的字节数膨胀。

  6. 仅导出导入其他EXE和DLL所需的极少数功能。运行“dumpbin / exports yourfile.dll”以获取导出函数的列表。仅导出依赖于DLL的代码直接调用的函数。如果要导出DLL外部没有人直接调用的东西,请不要导出它。如果内部没有任何内容调用它,链接器将优化它(并且它的依赖)。

  7. 不要导出整个C ++类。如果您的DLL是C ++代码,则导出简单的C包装函数。