c++ - 为什么 PCRE 静态库在 Win 和 Linux 上大小不同

标签 c++ c linux static-libraries pcre

这是我第一次在项目中使用 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/

相关文章:

c - 如何在没有 x-macros 的情况下在 C 中获得类似反射的功能

c - 错误: How to fix the digitalWrite() error?

c - 保证 4*ceil(n/3) 有足够的存储空间,其中 n 是一个 int

linux - 如何用其他文本替换部分系统日志尾部?

c++ - Boost 条件变量等效于 CRITICAL_SECTION

c++ - Visual Studio C++ - 未解析的符号 __environ

C++使一个字符数组具有字符串的值

c++ - 使用 XcvData 获取 IP 地址

linux - 在程序集中将数组传输到数组得到奇怪的输出。为什么?

c - IPv6: connect() 总是失败,errno 22