2016-07-15 4 views
1

私たちは、Linux開発をウィンドウズに移植しています。.libファイルはarで作成された単なる.aファイルとどう違うのですか?

スタティックライブラリを作成するには、ウィンドウ(Msys2)でarを使用してlibXXX.aファイルを作成します。 Windowsの方法は、実際にはいくつかのWindowsツールを使用して.libファイルを作成することです。しかし、libXXX.aファイルは、私たちのmsys2ツールチェーン上で正常に動作しているようです。しかし、このファイルとのリンクはVERYです。したがって、.a.libファイルの違いは何ですか? .libファイルを作成するとリンクが高速化されますか?

+0

'libxxx.a'の' a'は* Archive *の略です。これは単にオブジェクトファイルの圧縮されていないアーカイブです。私はVisual Studioで使われている '.lib'ファイルについては何も知らないのですが、そのベースとしてオブジェクトファイルのアーカイブに過ぎないと思います。 WindowsとVisual Studioを知っている以上、おそらくそれ以上のことはありますが、その中心は依然としてオブジェクトファイルのアーカイブである可能性があります。 –

+0

@JoachimPileborg:私は 'ar'がアーカイブを作成することを知っています。問題は、 '.lib'ファイルとは何か、アーカイブとはどのような関係があるのか​​です。 – gexicide

+0

[関連する(重複しない場合)質問](http://stackoverflow.com/questions/2371531/which-format-does-static-library-lib-files-use-where-can-i-find-official) –

答えて

0

.a.libは、複数のオブジェクトファイルを含むアーカイブです。違いは、前者の場合はELFバイナリで、後者の場合はCOFFファイル(MS COFF)です。おそらく、あなたのツールチェーンは、ネイティブでないオブジェクトフォーマットにリンクするために何か特別な努力を必要とするでしょう。

P.S. .libファイルには、COFFオブジェクトの代わりに動的インポートを作成するためのスタブが含まれることもあります。また、同じ理由(非ネイティブデータ形式)のビルド時間に影響を与える可能性があります。

P.P.S明らかに、リンキングプロセスのスピードを上げるためには、すべての入力が同じ形式(リンカのネイティブ)でなければなりません。

+0

私の '.a'のオブジェクトファイルはCOFFファイルです。私は窓の上にあり、COFFを生成するmingwのツールチェーンを使用しています。 'ar'はあなたがアーカイブしたいものを気にしません。 COFFファイルを喜んでアーカイブします。 – gexicide

関連する問題