1

我正在使用 Visual Studio 2012 在调试模式下编译程序。StylesDatabase.cpp 和 LanguagesDatabase.cpp 过去在没有 /bigobj 的情况下也能正常编译……因为我删除了一些函数并将一些函数从受保护转移到公共。

这两个 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 回答 1

1

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

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

于 2014-05-25T08:57:04.643 回答