2016-07-15 55 views
1

我們正在將我們的linux開發移植到windows。.lib文件與僅使用ar創建的.a文件有什麼不同?

要創建一個靜態庫,我們仍然使用windows(Msys2)下的ar來創建一個libXXX.a文件。窗口的方式實際上是使用一些窗口工具創建一個.lib文件。但libXXX.a文件似乎在我們的msys2工具鏈上正常工作。但鏈接到這個文件是非常緩慢。那麼.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

相關問題