为什么PCRE静态库在Win和Linux上大小不同
Why does PCRE static library differs in size on Win and Linux
这是我第一次在项目中使用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
- 如何在 Linux for Windows 上通过 MinGW 构建静态 ICU 的 Boost
- 如何在 linux 可执行文件中使用静态库
- Linux Mint 19 上的 CMake 3.11 无法找到静态的 Boost 库
- 无法在clang Linux中分配非静态成员函数,但我可以在Visual Studio Windows中分配
- 使用静态 Qt 构建在 Linux 上部署 Qt5 应用程序
- 将静态库链接到 gcc Linux 中的动态实验室
- 无效使用非静态成员函数 c++ 线程 linux
- 您如何将所有链接依赖项都包装到一个Linux静态库中
- 测量静态,堆和堆栈内存?(C ,Linux -CentOS 7)
- 没有返回类型的静态函数可以通过Windows上的编译,但不能传递Linux上的编译
- 混合调试和发布库:Windows vs Linux,静态与共享
- 在 Linux 系统上使用 c++ 链接到共享库和静态库
- 在Linux上构建具有链接时代码生成功能的静态库的正确方法是什么
- 为什么在 linux 信号事件中未定义静态成员的使用
- Linux:C/C++标准库静态链接与动态链接
- 静态 opencv 在 Arm Linux busybox 上找不到 USB 网络摄像头
- 如何将静态库链接到Linux中的Makefile
- 如何在 64 位 Linux Mint 上构建最小的静态 Qt 5.2 32 位库
- Linux上的静态Qt5构建:部署时如何处理字体
- c++ Linux静态变量的双重析构.链接符号重叠