我有一些巨大的C++项目,所有这些项目都是用msvc++ 2010编译的。 我希望DLL文件更小, 谁能给我一些灵感吗?
编译发布,使用链接时间代码生成(LTCG),删除未使用的引用(OPT:ICF),将CRT放入DLL中。除非必要,否则不要从 DLL 中导出内容。
除了上述建议之外,请确保在 Project Properties->C/C++->Favor Size Or Speed 中,选择 Favor Small code (/Os)。
编译为发布版本,而不是调试。
动态而不是静态地与 MSVCRT 链接。 这意味着您可能必须将 MSVCRT DLL 与您的程序一起分发。 根据程序的结构,更改 CRT 的链接可能会产生意想不到的副作用。
删除所有不需要的代码。使用分析或代码覆盖工具来识别似乎没有被调用的代码。您也许可以将其删除。
查看每个 .c 或 .cpp 文件的所有相应 .obj 文件。 如果任何一个 obj 文件相对于代码文件的大小来说过大,则可能暗示可以减少其中的某些内容。
尽量减少 DLL 中全局实例或全局数据的使用。二进制大小将因声明的全局变量的字节数而膨胀。
仅导出导入其他 EXE 和 DLL 所需的极少量函数。 运行“dumpbin /exports yourfile.dll”以获取导出函数的列表。仅导出由依赖于 DLL 的代码直接调用的函数。如果您要导出 DLL 之外的任何人都不会直接调用的内容,请不要导出它。如果没有内部调用它,链接器将优化它(及其依赖项)的使用。
不要导出整个 C++ 类。如果您的 DLL 是 C++ 代码,则导出简单的 C 包装函数。