PCRE静的ライブラリのサイズがWindowsとLinuxで異なるのはなぜですか

It's the first time I've used PCRE library in my project. I downloaded the source code (version 8.20) and built it with the same options on linux and windows (both x86). I am really puzzled with the difference in the librarys' sizes. On windows I have a static lib of 138Kb while on Linux it is 1700Kb whcih is more than 12 times as much. I will appreciate any comments on this. Maybe I was doing something wrong?

更新:
オプションの設定は次のとおりです:--disable-cpp --enable-utf8 --enable-newline-is-any
最適化フラグは-O2です

mingw gccバージョン4.5.2で構築された勝利
gccバージョン4.3.2でビルドされたLinux

1
また、各バージョンがどのダイナミックライブラリにリンクされているかを知るのに役立ちます。
追加された 著者 Donal Fellows,
おそらく、linuxライブラリにはデバッグ情報が含まれています。
追加された 著者 nos,
"LinuxとWindowsで同じオプションを使ってビルドしました" - これらのオプションのリストを気にしてもらえますか?それで人々はおそらく自分のマシンでその効果を再現できますか?また、おそらくバージョンで使用されているコンパイラをリストアップする価値があります。
追加された 著者 Damien_The_Unbeliever,
これらの静的ライブラリは、ダイナミックライブラリとリンクされていません。各静的ライブラリは他のものに依存しません。
追加された 著者 Phantom Lord,
さて、私はpcreのデバッグオプションを見つけるために結びつけましたが、何も見つかりませんでした。おそらく、デフォルトで使用されているLinux上にgccのデバッグフラグがいくつかありますが、私はそれらを認識していませんか?
追加された 著者 Phantom Lord,

2 答え

ネイティブプラットフォームをターゲットにしているので、MingWはWindowsライブラリ用のWindows CRLを使用しています。

MingWのドキュメントでは、Win32 APIを薄く抽象化するDLLである「Windowsに付属のCRL」を使用しています。したがって、MingWでコンパイルしているライブラリはDLLをロードしています。つまり、重要なコードは別のファイル(.DLL)にありますが、Linuxの場合はプラットフォームに適したGCC CRLが静的にリンクされています。

Linuxでは、静的にリンクされたライブラリは、静的にリンクされた適切なCRLを使用します。これは、CRLの大部分を含む多かれ少なかれ、別のCRLを使用するライブラリで後で呼び出すことができ、プログラム全体の最適化などに役立つためです。

Linuxで実際の実行ファイルをコンパイルするときのように、パイプラインをダウンさせると、ほとんどの静的ライブラリが最終実行ファイルに含まれないことがわかります。したがって、このサイズの違いは、実行可能ファイルLinuxはおそらくさらに大きくなりますが、他の要因にもかかわらず)。

静的リンクは、プログラム全体の最適化、ダイナミックリンクの更新などが可能ですが、アーティクルと1000回の炎戦に関するトピックです。質問の範囲外です。

簡単に要約すると、MingWは実際には不正行為であり、静的ライブラリは外部DLLをロードします。 LinuxのGCCは静的にすべての方法でリンクしています。

1
追加された
問題はライブラリのサイズであり、実行可能なサイズではありません。
追加された 著者 AProgrammer,

あなたのLinuxライブラリに対してstripを実行してみてください。これにより、デバッグ情報が削除されます。

$ strip libpcre.a
1
追加された