链接器内存不足LNK1102

时间:2008-10-06 12:03:03

标签: c++ windows visual-studio linker

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

11 个答案:

答案 0 :(得分:8)

编译普通C时我遇到了同样的问题:

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

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

答案 1 :(得分:5)

项目(右键单击)→属性→配置属性→链接器→优化→参考→更改为保留未参考数据

在我的机器上工作!

答案 2 :(得分:1)

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

这也可能有助于维护。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

试试这个:

选择一堆最常用的类,通过将所有内联方法从头文件移动到实现文件来使其非内联。我在连接时间方面经历了巨大的变化。我们的一个项目从15分钟的纯连接到仅仅30秒。这也应该影响链接过程的记忆。

祝你好运! //马格努斯

答案 5 :(得分:1)

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

希望它有所帮助!

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

我在VS 2008中逐步构建一个大项目时遇到了同样的错误。我只是清理项目,删除所有* .ilk,* .dll,* .exe和* .pdb文件并构建所有文件试。

答案 9 :(得分:0)

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

set PreferredToolArchitecture=x64

然后运行Visual Studio。

答案 10 :(得分:0)

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

对于CMake生成的项目,可以通过在DemoButton( onPressed: () {}, color: Colors.blue, upperCase: false, // set it to false child: Text( "button", style: TextStyle(fontSize: 40, color: Colors.orange), ), ) 中将变量CMAKE_GENERATOR_TOOLSET设置为值host=x64来实现:

CMakeLists.txt

或在cmake命令行上添加

set(CMAKE_GENERATOR_TOOLSET "host=x64")

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