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

Why does PCRE static library differs in size on Win and Linux

本文关键字:Linux 静态 PCRE Win 为什么      更新时间:2023-10-16

这是我第一次在项目中使用PCRE库。我下载了源代码(8.20版本),并在linux和windows(都是x86)上使用相同的选项构建它。我对图书馆的大小差异感到很困惑。在windows上,我有一个138Kb的静态库,而在Linux上,它是1700Kb,这是12倍多。我将感谢对此的任何评论。也许我做错了什么?


更新:配置选项为:——disable-cpp——enable-utf8——enable-newline-is-any
优化标志是-O2
在win上使用mingw gcc版本4.5.2构建

由于您的目标是本机平台,因此MingW对Windows库使用Windows CRL,而对…使用Linux CRL。

MingW文档说它使用"Windows自带的CRL",这是一个抽象了Win32 API的DLL。因此,您正在用MingW编译的库将加载一个DLL,这意味着重要的代码在一个单独的文件(.DLL)中,而Linux最有可能静态地链接适合平台的GCC CRL。

在Linux操作系统中,静态链接库使用合适的静态链接CRL。这意味着或多或少要包含很大一部分CRL,因为您以后可能会使用不同的CRL调用库,这有助于整个程序的优化,等等。

沿着管道向下,就像在Linux中编译实际的可执行文件一样,您可能会发现大多数静态库不包括在最终的可执行文件中,因此可执行文件之间的大小差异应该小得多(尽管只有静态的Linux可能会更大,尽管有其他因素)。

每种方法都有许多优点/缺点-静态链接更适合整个程序优化,动态链接允许更新等。但这是一篇文章和上千场口水仗的主题,超出了你的问题范围。

简单地总结:MingW实际上是欺骗,静态库加载一个外部DLL。

尝试在Linux库上运行strip。这将删除调试信息。

$ strip libpcre.a