【发布时间】:2015-03-14 14:27:12
【问题描述】:
我需要制作一个符合以下要求的程序:
- 独立(无需安装)
- 针对大小进行了优化
- Windows XP 兼容
问题在于,例如添加 #include <d3dx9.h> 并使用单个函数会使可执行文件大小增加 370kb。
有什么方法/工具,所以如果我只使用库的几个函数,它不会完全链接到可执行文件中?
我尝试了以下没有成功
- 发布模式
- 整个程序优化
- 最小化尺寸 (/O1)
- 支持小代码 (/Os)
- /OPT:REF
- /OPT: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。
【问题讨论】:
-
通常,链接器会从静态库中删除未使用的代码,并使用几个选择标志从您的项目中删除代码。
-
我认为
D3DXCreateSphere不太可能是一个简单的小函数,在该库中没有自己的依赖项。 -
有数千个使用 DirectX 的 64 KB 演示。检查 pouet.net。
-
仅供参考,
void main()不是有效的 C++。 -
@WhozCraig 你认为它应该是 370Kb 的指令吗?应该注意的是,使用同一个库的更多功能也会增加相同的 370Kb。
标签: c++ linker static-libraries portability demoscene