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

问题描述 投票:0回答:4

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

c++ visual-c++
4个回答
2
投票

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


1
投票

除了其他答案之外,您还可以使用

upx
来压缩dll,或其他一些压缩器。

http://upx.sourceforge.net/


0
投票

除了上述建议之外,请确保在 Project Properties->C/C++->Favor Size Or Speed 中,选择 Favor Small code (/Os)


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 包装函数。

© www.soinside.com 2019 - 2024. All rights reserved.