为什么 Visual Studio 链接器不能打开一个非常大的静态库(>2.5GB)?

Why can't the Visual Studio linker open a very big static library (>2.5GB)?

我用 Visual Studio 2015 构建了一个重型模板 x64 调试静态库,它生成了一个超过 2.5GB 的 .lib 文件。问题是,当我想 link 它与我的可执行文件一起使用时,出现此错误:

LNK 1104 : cannot open 'my-lib.lib'

这个库肯定存在,因为我试图用 dumpbin.exe 打开它,看看是什么符号导致了大尺寸,但有趣的是 dumpbin 本身产生了同样的错误。

与 Visual Studio 一起使用的静态库是否有大小限制?

正如@TBBle 所建议的那样,首先尝试 64 位工具链选项(无论如何这可能是值得的,因为您可以使用更大的库获得更好的性能),但我认为您仍然 运行 .lib 文件超过 2GB 的问题,因为我认为它超过了 Windows 格式限制(我一直在努力寻找最大允许大小的明确答案,但我肯定 运行 遇到了问题大小接近 2GB)。

很可能您唯一真正的解决方案是将 .lib 文件拆分为更小的静态库,或者可能采取另一种方式,根本不使用静态库 - 只需将所有 cpp 文件直接构建到你的项目。这将取决于您的项目结构,这是最简单的方法。

我发现一种快速拆分静态库项目的方法是复制 vcxproj 和 vcxproj.filters 文件,然后在一个版本中将 <ProjectGuid>, <RootNamespace> and <ProjectName> 字段更改为新值,然后加载它项目到您的解决方案中,并删除两个项目中每个项目的一半文件。

(重复我之前的评论作为答案,因为它有效...)

试试 64 位工具链。有关 PreferredToolArchitecture 环境变量的详细信息,请参阅 How to make Visual Studio use the native amd64 toolchain

同样,对于 dumpbin,使用 dumpbin 的 x64 原生版本。