如何使用 MSVC++ 2010 使 dll 更小



我有一些庞大的C ++项目,所有这些都是用msvc ++ 2010编译的。我希望 DLL 文件更小,谁能给我一些灵感?

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

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

http://upx.sourceforge.net/

除了上述建议外,请确保在"项目属性->C/C++->有利于大小或速度"中,选中"支持小代码 (/OS)"。

  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++类。导出简单的 C 包装器函数(如果 DLL C++代码)。

最新更新