C++ 为什么Win和Linux上的PCRE静态库大小不同

C++ 为什么Win和Linux上的PCRE静态库大小不同,c++,c,linux,static-libraries,pcre,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 在win上使用mingw gcc版

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

在使用gcc版本4.3.2构建的linux上,由于您的目标是本机平台,MingW将其Windows CRL用于Windows库,linux CRL用于…这一点

MingW文档说它使用了“Windows附带的CRL”,这是一个对Win32 API进行精简抽象的DLL。因此,使用MingW编译的库将加载一个DLL,这意味着重要的代码位于一个单独的文件(即.DLL)中,而Linux最有可能静态链接适合平台的GCC CRL

在Linux上,静态链接库使用适当的静态链接CRL。这意味着或多或少要包含一大部分CRL,因为稍后您可能会使用其他CRL调用库,这有助于整个程序优化,等等

接下来,就像在Linux中编译实际的可执行文件一样,您可能会发现最终的可执行文件中没有包含大部分静态库,因此可执行文件之间的大小差异应该小得多(尽管只有静态Linux的可能会更大,尽管有其他因素)

每种方法都有许多优点/缺点-静态链接更适合于整个程序优化,动态链接允许更新等…但这是一篇文章和一千场火焰之战的主题,超出了您的问题范围


简单地总结一下:MingW实际上是欺骗,静态库加载一个外部DLL。Linux上的GCC一直在静态链接。

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

$ strip libpcre.a

“在linux和windows上使用相同的选项构建”——您是否愿意列出这些选项,以便人们可以在自己的机器上重现这种效果?此外,可能值得列出与版本一起使用的编译器。了解每个版本链接的动态库也会有所帮助。这些静态库不会链接到任何动态库。每个静态库不依赖于其他任何东西。也许linux库包含调试信息。好吧,我想在pcre中找到任何调试选项,但我没有找到任何东西。也许Linux上有一些默认使用的调试gcc标志,我不知道它们???问题是关于库的大小,而不是可执行库的大小。