我和我的同事尝试构建一个包含数千个类的项目,但我们遇到了 LNK1102 错误(链接器内存不足)。我在网上看到了一些技巧,比如增加虚拟内存。我们试过了,但这没有帮助。我们还看到一些在编译代码时启用了不同的警告级别。一个人建议为警告启用 4 级。那怎么可能呢?还有其他建议吗?
11 回答
我在编译纯 C 时遇到了同样的问题:
"*LINK : fatal error LNK1102: out of memory*"
我的解决方案是:删除所有 *.pdb (DEBUG) 文件。在那之后,一切都毫无问题地联系在一起。因此,在我的情况下,pdb 文件可能是缺陷 - 以一种有趣的方式缺陷导致此链接器错误。
项目(右键)→属性→配置属性→链接器→优化→引用→更改为保留未引用的数据
在我的机器上工作!
我怀疑链接器也需要很长时间才能完成。既然你说有数千个 c++ 类,我的第一个想法是检查是否有很多内联类方法。
尝试这个:
选择一堆使用最多的类,通过将所有内联方法从头文件移动到实现文件来使它们成为非内联方法。我经历了链接时间的巨大变化。我们的一个项目从 15 分钟的纯链接时间缩短到了 30 秒。这也应该影响链接过程的内存。
祝你好运!//马格纳斯
如果项目太大,则将其拆分为几个组件。
这也可能有助于维护。
如果您在 Windows 机器上运行此程序,请在链接时打开任务管理器并转到性能页面。如果您看到页面文件的使用量一直在增加,那么请将其大小增加到至少两倍您的内存。如果页面文件在引发错误之前没有填满,请确保机器上有足够的磁盘空间。
如果使用 Visual C++ 6.0,请避免从“subst”驱动器或“网络映射”驱动器加载工作区。将项目复制到“C:\temp\MyProject\”文件夹,并从该位置加载工作区,这次“LNK1102”错误对我来说消失了。
希望能帮助到你!
我遇到了这个fatal error LNK1102: out of memory
错误,并通过使用 64bits compiler 和 linker解决了它。您设置一个环境变量:
set PreferredToolArchitecture=x64
然后运行 Visual Studio。
运行 64 位版本的链接器?缺点:你会得到一个 amd64 可执行文件。(与 32->64 交叉编译工具集不同,没有 64->32 位工具集)
链接时通过任务管理器绝对监控实际内存使用情况。如果可能,关闭其他程序以增加可用物理内存并将页面文件的大小设置为 4092 mb。
此外,它可能有助于创建链接 repro。这将允许其他人尝试在其他机器上重现您的链接问题。
在 VS 2008 中增量构建大型项目时,我遇到了同样的错误。我刚刚清理了项目,删除了所有 *.ilk、*.dll、*.exe 和 *.pdb 文件并重新构建。
这里多次提到的解决方案是使用 64 位主机编译器工具。
对于 CMake 生成的项目,这可以通过将变量设置CMAKE_GENERATOR_TOOLSET
为 value来实现host=x64
,无论是在CMakeLists.txt
:
set(CMAKE_GENERATOR_TOOLSET "host=x64")
或在 cmake 命令行上添加
-T host=x64
注意:此设置仅适用于 Visual Studio 生成器。对于任何其他生成器,它将导致致命错误。