【发布时间】:2012-07-25 18:49:08
【问题描述】:
尝试创建类似于 SFX(自解压安装程序)的东西,我使用 Visual c++ 中的自定义资源将安装文件包含在一个 exe 中。当安装文件的大小超过 ~900 MB 时,链接器无法生成嵌入资源的 exe。奇怪的是,链接器确实生成了一个没有任何警告的 exe。生成的 exe 是一个静态链接的 MFC App(可执行文件的主应用程序)。但是,不包括任何资源。我在从控制台链接期间观察了 exe 大小。它之前显示 900 MB,最后下降到 2MB exe。如果我删除了一些文件(比如总大小为 500MB),则生成的 exe 一切正常,并且嵌入了所有资源。自定义资源是否有实际大小限制?请注意,可执行文件的最终大小约为 1GB,这比 2GB win32 应用程序可以解决的要小得多。所以我想知道这是 vc++ 2010 的错误还是功能?顺便说一句,我还使用了 /expectedoutputsize 技巧。但这无济于事,除非链接速度更快,预期输出大小更大。
【问题讨论】:
-
Win32 资源不是包含大量数据的好方法。只需将它附加到您的文件中,从已知偏移量(大于可执行文件本身)开始,然后使用通常的文件读取功能来访问它。
-
另一种选择是将原始资源数据包含在目标文件中并将其链接。在 Linux/OS X 上,您可以使用 GNU objcopy 将二进制文件转换为目标文件,但我不确定你如何使用微软的工具在 Win32 上做到这一点。
-
是的,对于海量数据,将二进制文件附加到 exe 更有意义。但是,我仍然认为这是 VC++ 2010 中的链接器错误。如果我与调试版本链接,问题就消失了!所以我尝试了一些链接器选项,似乎使用 /INCREMENTAL=yes 就可以了!
标签: c++ visual-studio-2010 winapi