这是我第一次在项目中使用 PCRE 库。我下载了源代码(8.20 版)并在 linux 和 windows(均为 x86)上使用相同的选项构建它。我真的对图书馆大小的差异感到困惑。在 Windows 上,我有一个 138Kb 的静态库,而在 Linux 上,它是 1700Kb,是 12 倍多。
我将不胜感激对此的任何评论。也许我做错了什么?
更新:
配置选项是: --disable-cpp --enable-utf8 --enable-newline-is-any
优化标志是-O2
在使用 mingw gcc 版本 4.5.2 构建的 win 上
在使用 gcc 版本 4.3.2 构建的 linux 上
最佳答案
由于您的目标是 native 平台,MingW 将其 Windows CRL 用于 Windows 库,而 Linux 则用于...。
MingW 文档说它使用“Windows 附带的 CRL”,这是一个对 Win32 API 进行精简抽象的 DLL。因此,您使用 MingW 编译的库随后将加载一个 DLL,这意味着重要代码位于单独的文件(.DLL)中,而 Linux 最有可能静态链接适用于该平台的 GCC CRL。
在 Linux 上,静态链接库使用适当的静态链接 CRL。这意味着或多或少包含了 CRL 的大部分,因为您稍后可以使用使用不同 CRL 的内容调用该库,它有助于整个程序优化等。
在管道中,就像当你在 Linux 中编译一个实际的可执行文件时,你可能会发现大部分静态库不包含在最终的可执行文件中,因此可执行文件之间的大小差异应该小得多(尽管仅静态 Linux 可能会更大,尽管有其他因素)。
每种方法都有很多优点/缺点 - 静态链接更适合整个程序优化,动态链接允许更新等......但这是一篇文章和一千场火焰 war 的主题,超出了你的问题。
总结的很简单:MingW其实是在作弊,静态库加载了一个外部DLL。 Linux 上的 GCC 一直在静态链接。
关于c++ - 为什么 PCRE 静态库在 Win 和 Linux 上大小不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8265595/