c++ - 为什么与 Direct X 链接会大大增加我的程序大小?

标签 c++ linker static-libraries portability demoscene

我需要制作一个具有以下要求的程序:

  • 独立(无需安装)
  • 尺寸优化
  • Windows XP 兼容

问题是,例如添加 #include <d3dx9.h>并使用单个函数将可执行文件的大小增加 370kb。

有没有什么方法/工具,如果我只使用库的几个函数,它不会完全链接到可执行文件中?

我尝试了以下但没有成功

  • Release模式
  • 整体程序优化
  • 最小化大小 (/O1)
  • 喜欢小代码(/Os)
  • /OPT:REF
  • /选择:ICF
  • 使用链接时间代码生成(/LTCG)

这是测试代码(我使用的是 2004 年 10 月的 d3dx 版本,它允许在此处找到静态链接 https://github.com/kavika13/jumpmanzero-thirdparty)

#pragma comment (lib, "d3dx9.lib")
#include <d3dx9.h>
int main() {
    D3DXCreateSphere(0, 0, 0, 0, 0, 0);
    return 0;
}

注意:应该注意的是,使用同一库的更多功能会增加相同的 ~370Kb。

最佳答案

我本来打算建议/OPT:REF 但后来看到你已经尝试过了。

如果所有其他方法都失败了,您可以尝试其中一种“可执行打包程序”选项,例如 ASPack (aspack.com) 或 UPX (upx.sourceforge.net)。

它们会压缩您的可执行文件并且不会引入额外的依赖项。

关于c++ - 为什么与 Direct X 链接会大大增加我的程序大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27976240/

相关文章:

c++ - VS2005中如何将静态库项目转为dll项目

python - 在 C++ 中创建列表列表

带有继承的 C++ 共享库

iphone - MonoTouch 和 iPhone 静态库

C++ 链接错误 : the compiler can not find the definition of the function

c++ - 具有重复符号的 C++ 插件库上的段错误

c++ - 图书馆没有正确链接/包括

c++ - 包含 boost::optional 对象的 std::vector 对象是否可移动?可移动 boost::可选?

c++ - 如何获取 QToolBar/QDockWidget 上下文菜单操作?

C++ next float with numeric_limits/epsilon?