使用/bigobj链接耗时太长

Linking taking too long with /bigobj

本文关键字:链接 bigobj 使用      更新时间:2023-10-16

我正在使用Visual Studio 2012在调试模式下编译一个程序。StylesDatabase.cpp和LanguagesDatabase.cpp用来编译没有/bigobj…因为我删除了一些函数,并将一些函数从protected转移到public。

这两个c++文件都相当小,但使用了模板化的容器类,如Boost.MultiIndex(es), Boost.Unordered(_maps)和Wt::Dbo::ptrs。Wt::Dbo::ptr是一个指向数据库对象的指针,而Wt::Dbo是一个ORM库。

修改后,编译器失败,要求我设置/bigobj。在我设置/bigobj之后,编译器工作正常,但是链接器花费了30多分钟。

我的问题是:

    为什么一个相当小的文件可以超过Visual c++的限制?究竟是什么原因导致超过限制。
  1. 如何在不拆分cpp文件的情况下防止超出限制?
  2. 为什么链接器要花这么多时间?

如果有必要,我可以提供源代码

您的文件不是链接器必须处理的唯一文件-它还必须处理库文件,在您的情况下,这些是需要/bigobj标志的Boost模板库。看看这个微软页面:http://msdn.microsoft.com/en-US/library/ms173499.aspx。即使你的文件很小,大量模板化的库也可能需要你使用/bigobj。

你可以这样想:某人必须编写大量代码,这样你才能编写更少的代码来编写程序,但是其他人生成的代码就在那里,并且在某个时候也必须处理。