代码之家  ›  专栏  ›  技术社区  ›  Juicebox

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

  •  4
  • Juicebox  · 技术社区  · 9 年前

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

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

    这个库确实存在,因为我尝试用 dumpbin.exe 看看是什么符号导致了大尺寸,但有趣的是垃圾箱本身也会产生同样的错误。

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

    2 回复  |  直到 9 年前
        1
  •  2
  •   Community CDub    7 年前

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

    尝试64位工具链。看见 How to make Visual Studio use the native amd64 toolchain 有关 首选工具体系结构 环境变量。

    类似地,对于dumpbin,使用x64本机版本的dumpbin。

        2
  •  2
  •   the_mandrill    9 年前

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

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

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