用/ bigobj链接花了太长时间

时间:2014-05-25 08:04:25

标签: c++ boost compiler-construction linker wt

我正在使用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分钟。

所以我的问题是:

  1. 一个相当小的文件怎么会超出Visual C ++的限制?究竟是什么导致超出限制。
  2. 如何在不拆分cpp文件的情况下防止超出限制?
  3. 为什么链接器花了这么多时间?
  4. 如果必要,我可以提供来源。

1 个答案:

答案 0 :(得分:1)

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

您可以这样思考:有人必须生成大量代码,以便您可以编写更少的代码编写程序,但是其他人生成的代码在那里,必须在某个时候处理好。