【问题标题】:Why can't the Visual Studio linker open a very big static library (>2.5GB)?为什么 Visual Studio 链接器无法打开非常大的静态库(>2.5GB)?
【发布时间】:2016-02-02 12:45:53
【问题描述】:

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

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

这个库肯定存在,因为我尝试使用dumpbin.exe 打开它以查看导致大尺寸的符号,但有趣的是,dumpbin 本身也会产生相同的错误。

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

【问题讨论】:

  • 你试过64位工具链吗?有关 PreferredToolArchitecture 环境变量的详细信息,请参阅How to make Visual Studio use the native amd64 toolchain。同样,对于dumpbin,您使用的是x64-native 版本的dumpbin 吗?
  • 我会试试这个,让你知道我的结果。谢谢!
  • 它有效,谢谢!您应该将其写为答案,以便我可以接受它,以便有相同问题的人更快地找到解决方案:)

标签: c++ visual-studio static-libraries


【解决方案1】:

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

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

同样,对于dumpbin,使用x64-native 版本的dumpbin。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 2015-07-16
      • 2012-09-30
      • 2010-09-25
      相关资源
      最近更新 更多