如何解决使用基于 boost 的库时,为什么我生成的预编译文件如此之大?
我正在使用通过 vcpkg 处理的库进行项目。 由于编译时间不是很长,我清理了一些头文件并将项目配置为使用预编译头文件,将 STL 和 vcpkg 头文件放入其中。
我开始遇到臭名昭著的 C1076,C3859 and C1060 errors,快速检查生成的 pch 显示我有一个 1.2GB 的大文件......
我使用 /showIncludes 开关运行了一个构建,看起来 spirit-po(我用于翻译的基于 Boost 的库)引用了 2600 多个 Boost 标头。 (我的项目只有 70 个文件,没什么特别的) 它是项目中唯一使用的基于 Boost 的库。
为了确定这是罪魁祸首,我从 pch 中删除了除 Spirit-po 文件之外的所有内容:
#pragma warning(push)
#pragma warning(disable : 4267)
#include <spirit_po/spirit_po.hpp>
#pragma warning(pop)
生成的文件仍然有 1GB 大...
调试版本和发布版本的大小没有区别。
使用空的 pch 文件,生成的文件大约为 4MB。
假设一个 250MB 的文件被认为很大,我怎么会得到一个 4 倍大小的文件?
在 pch 中只有那个库,我不再有编译错误,但我不希望将来再次出现问题。
我使用的是 Microsoft Visual Studio Community 2019 版本 16.8.4。
我有哪些选择可以改善这种情况?
这可能是 Visual Studio 中的配置错误吗?
我是否必须完全放弃库才能删除 Boost 依赖项?
还有其他选择吗?
感谢阅读我:)
解决方法
-
仅标头库有效,因为这些标头中没有遗漏任何细节。
-
预编译头包含翻译单元开始前头的所有编译信息。
-
很大一部分(大部分)boost 库只是头文件。雪上加霜的是,它们是高度通用的,这意味着会有许多模板及其实例。
1 + 2 + 3 是完美风暴。如果大小是一个问题,最好的办法是屏蔽标题中的 boost 并将它们包含在主动依赖它们的选定翻译单元中。
,在进行更多研究时,我发现了以下库:
-
tinygettext :
+ 不依赖于 Boost
- 需要 Iconv 库才能工作,即使它可以作为 vcpkg 包使用,这对于在 Windows 上运行也不是那么简单 -
spiritless_po
+ 不依赖于 Boost
+ 自包含
- 与 spirit-po 不兼容
我测试了两个,我必须说最后一个非常适合我的使用,也就是直接使用 po 文件作为翻译... 我想这不是一个适合所有的解决方案,但对于某些人来说可能已经足够了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。