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