2017-07-21 12 views
2

私はMingw64 for Windowsを使用しています(もちろん)、私は通常静的にlibwinpthread.aとリンクしています。しかし、私はlibpthread.aというライブラリもあることに気付きました(勝利なし)。私は彼らが異なるサイズを持っていることを見ることができるので、何かが異なっていなければなりません。スレッドライブラリを含む非常に簡単なプログラムを作成した場合、-libwinpthreadの代わりに-libpthreadタグを使用すると、コンパイルされたコードのサイズが異なることがわかります。libwinpthread.aとlibpthread.aの違いは?

私はwinpthreadがBSDライセンスを使用していることを知っています。また、LinuxではpthreadがLGPLライセンスを使用しています。ライセンスについて何かできるのでしょうか?多分libpthreadはLGPLを使用しており、libwinpthreadはBSDを使用していますか?知りません。

ここに誰かが私を助けてくれることを願っています。私は別の結果を得るので、何かが異なっていなければなりません。

+0

libwinpthread.aはlibpthread.aにリンクしていると思いますが、WindowsとLinuxの両方でpthreadを使用してシームレスにコンパイルすることができます。 Linux用にコンパイルしているだけの場合は、libwinpthreadをリンクする必要はありません。 – hoodaticus

+0

おそらくそう:)。になり得る。しかし、私はこの質問を送った後、それらのファイルを比較するために16進エディタを使いました。 libthreadではテキスト "nanosleep.c"を見ることができますが、libwinpthreadでは存在しません。私は理由を知らない:(私は違いがあると思うが、私はすべてのバイトを比較するにはあまりにも怠惰だ:)。 – mikehog

+0

Windowsでは契約のOSサポートがないため、Windowsではnanosleepを使用できません。これは基本的に私の理論を証明します。 – hoodaticus

答えて

0

これは恥ずかしいですが、最終的にlibpthread.aとlibwinpthread.aの違いがわかります。 99.9%(100%とも言えます)と同じです。

唯一の違いは、libwinpthread.aがより圧縮されている点です。 私はmake-commandでwinpthread-codeをコンパイルしようとしました。 そして、 "make install"コマンドでインストールします。 しかし、代わりに "make install-strip"をインストールすると、シンボルテーブルなしのa-fileがインストールされます。 既にインストールされているAファイルと全く同じ結果です。

シンボルテーブルなしでwinpthread(静的リンク)を使用する場合は、-lwinpthreadタグを使用してください。 winpthreadのシンボルテーブルを使用する場合は、-lpthreadタグを使用します。

静的ライブラリ(aファイル)は、oファイルが入ったアーカイブ形式(tarなど)です。 a-fileを表示するには、Windowsの場合mingw-w64、cygwinまたはmsys2などが必要です。 SO端子に書き込むことにより、A-ファイルを表示:AR -t -file.a

あなたが書くことができ、A-ファイルを抽出したい場合は、次のar -x file.a

今、あなたは意志いくつかのoファイルがあります。あなたは、書面により、O-ファイル内のコンテンツを表示することができ :NM -C file.o

あなたは、O-ファイルをdiassemblerしたい場合は、単に書くことができます。

file.o objdumpは-Dを書きますかobjdump -D file.o> obj_arm.txt

libpthreadの1つのoファイルとlibwinpthreadの1つのoファイルでこれを行います。 そして、お気に入りのソフトウェアとtxtファイルを比較してください。 これらは100%同じです。

+0

静的ライブラリ*は、オブジェクトファイルのアーカイブファイルであり、 'ar'(https://en.wikipedia.org/wiki/Ar_(Unix))のオブジェクトファイルは ですが、' ar'アーカイブは圧縮されていません。 zipよりも 'tar'によく似ています。 –

+0

ありがとうございました。私の答えを編集する。 – mikehog

関連する問題