【问题标题】:LNK1106 with big binary resource具有大二进制资源的 LNK1106
【发布时间】:2010-12-17 02:05:05
【问题描述】:

我的项目中有一个相当大的 .dat 文件 (896MB) 作为 BIN 资源。现在我收到 LNK1106 链接错误(“致命错误 LNK1106:无效文件或磁盘已满:无法查找 0x382A3920”。) 我在 Windows XP 下使用 Visual Studio 2005,并在具有高虚拟内存设置和大量磁盘空间的 4GB RAM 机器上进行了尝试。 我尝试了许多不同的优化标志,但都无济于事。

有人知道吗?

编辑:我已将其缩小到已编译资源的特定大小。如果 .res 文件为 544078588 字节(约 518.9MB)或更大,则会发生错误。如果它更小,它工作得很好。不过还是没有解决办法……

【问题讨论】:

  • 二进制偏移量为 898 MB。因此,链接器显然在文件末尾之外寻找,大约 2MB。不知道为什么,但这个信息是有道理的。

标签: c++ windows visual-studio visual-studio-2005 linker


【解决方案1】:

在“附加链接器选项”下,添加/expectedoutputsize:600000000,链接将像魅力一样发挥作用。不过,你不能用那个开关走得太远,否则你最终会得到:

致命:链接错误 LNK1102:内存不足

【讨论】:

  • 这世界上哪里可以添加/expectedoutputsize:600000000我在项目设置中找不到这个地方?!
【解决方案2】:

我通过将 /OPT:IFC 更改为 /OPT:NOIFC 来解决此问题。不能告诉你为什么它有效。您的结果可能会有所不同。

【讨论】:

  • 感谢您的意见!不过,这对我来说似乎没有任何区别...... ;-\ 这是我的链接命令行: /VERBOSE:LIB /OUT:"NoDebug/MyProgram.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"MyLib_release \win\lib" /MANIFEST /MANIFESTFILE:"NoDebug\MyProgram.exe.intermediate.manifest" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:NOICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT MyLib.lib kernel32.lib user32 .lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
【解决方案3】:

dat 文件是生成的还是最近更改过的?您的程序可能正在尝试链接不正确的版本。

【讨论】:

  • 嗯,很明显它使用了正确的文件。当我将其替换为较小的文件时,链接成功。现在尝试较小的文件,看看我是否能找到一个神奇的大小......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多