【问题标题】:linker out of memory LNK1102链接器内存不足 LNK1102
【发布时间】:2010-09-15 11:57:54
【问题描述】:

我和我的同事尝试构建一个包含数千个类的项目,但我们遇到了 LNK1102 错误(链接器内存不足)。我在网上看到了一些技巧,比如增加虚拟内存。我们试过了,但这没有帮助。我们还看到一些在编译代码时启用了不同的警告级别。一个人建议为警告启用 4 级。 那怎么可能呢?还有其他建议吗?

【问题讨论】:

  • 你编译的是什么语言,工具版本是什么?
  • 我们正在使用 Windows Embedded CE 6.0 Platform Builder 构建 C++ 代码。
  • 最好不要标记这个“Windows”——这通常被解释为 x86/x64 产品。
  • 通过“增加虚拟内存”,您是在说/3GB标志和朋友(msdn.microsoft.com/en-us/library/ms791558.aspx)吗?

标签: c++ windows visual-studio linker


【解决方案1】:

我在编译纯 C 时遇到了同样的问题:

"*LINK : fatal error LNK1102: out of memory*"

我的解决方案是:删除所有 *.pdb (DEBUG) 文件。 在那之后,一切都毫无问题地联系在一起。所以在我的情况下,一个 pdb 文件可能是缺陷 - 以一种有趣的方式缺陷导致此链接器错误。

【讨论】:

  • 清除 pdb 文件解决了 LNK1102 错误,并且似乎加快了构建速度!
【解决方案2】:

项目(右键)→属性→配置属性→链接器→优化→引用→更改为保留未引用的数据

在我的机器上工作!

【讨论】:

    【解决方案3】:

    如果项目太大,则将其拆分为多个组件。

    这也可能有助于维护。

    【讨论】:

    • 我们更愿意将其作为最后的选择。
    【解决方案4】:

    如果您在 Windows 机器上运行此程序,请在链接时打开任务管理器并转到性能页面。 如果您看到页面文件使用量一直在增加,直到其满,则将其大小增加到至少两倍您的内存。 如果页面文件在引发错误之前没有填满,请确保机器上有足够的磁盘空间。

    【讨论】:

      【解决方案5】:

      我怀疑链接器也需要很长时间才能完成。既然你说有数千个 c++ 类,我的第一个想法是检查是否有很多内联类方法。

      试试这个:

      选择一堆使用最多的类,通过将所有内联方法从头文件移动到实现文件,使它们成为非内联方法。我经历了链接时间的巨大变化。我们的一个项目从 15 分钟的纯链接时间缩短到了 30 秒。这也应该会影响链接过程的内存。

      祝你好运! //马格纳斯

      【讨论】:

        【解决方案6】:

        如果使用 Visual C++ 6.0,请避免从“subst”驱动器或“网络映射”驱动器加载工作区。将项目复制到“C:\temp\MyProject\”文件夹,并从该位置加载工作区,这次“LNK1102”错误对我来说消失了。

        希望对你有帮助!

        【讨论】:

          【解决方案7】:

          我遇到了这个fatal error LNK1102: out of memory 错误,并通过using 64bits compiler and linker 解决了它。你设置一个环境变量:

          set PreferredToolArchitecture=x64
          

          然后运行 ​​Visual Studio。

          【讨论】:

          • 最佳答案 4 确定!
          【解决方案8】:

          运行 64 位版本的链接器?缺点:你会得到一个 amd64 可执行文件。 (与 32->64 交叉编译工具集不同,没有 64->32 位工具集)

          【讨论】:

            【解决方案9】:

            我在 VS 2008 中增量构建一个大项目时遇到了同样的错误。我刚刚清理了项目,删除了所有 *.ilk、*.dll、*.exe 和 *.pdb 文件并构建了所有再次。

            【讨论】:

              【解决方案10】:

              链接时通过任务管理器明确监控实际内存使用情况。如果可能,请关闭其他程序以增加可用物理内存并将页面文件的大小设置为 4092 mb。

              另外,创建link repro 可能会有所帮助。这将允许其他人尝试在其他机器上重现您的链接问题。

              【讨论】:

                【解决方案11】:

                here 多次提到的解决方案是使用 64 位主机编译器工具。

                对于 CMake 生成的项目,这可以通过在 CMakeLists.txt 中将变量 CMAKE_GENERATOR_TOOLSET 设置为值 host=x64 来实现:

                set(CMAKE_GENERATOR_TOOLSET "host=x64")
                

                或者在cmake命令行添加

                -T host=x64
                

                注意:此设置仅适用于 Visual Studio 生成器。对于任何其他生成器,这将导致致命错误。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-10-15
                  • 1970-01-01
                  • 2020-08-17
                  • 2016-04-29
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多