我們正在將我們的linux開發移植到windows。.lib文件與僅使用ar創建的.a文件有什麼不同?
要創建一個靜態庫,我們仍然使用windows(Msys2)下的ar
來創建一個libXXX.a
文件。窗口的方式實際上是使用一些窗口工具創建一個.lib
文件。但libXXX.a
文件似乎在我們的msys2工具鏈上正常工作。但鏈接到這個文件是非常緩慢。那麼.a
和.lib
文件有什麼區別?會創建一個.lib
文件加快鏈接?
我們正在將我們的linux開發移植到windows。.lib文件與僅使用ar創建的.a文件有什麼不同?
要創建一個靜態庫,我們仍然使用windows(Msys2)下的ar
來創建一個libXXX.a
文件。窗口的方式實際上是使用一些窗口工具創建一個.lib
文件。但libXXX.a
文件似乎在我們的msys2工具鏈上正常工作。但鏈接到這個文件是非常緩慢。那麼.a
和.lib
文件有什麼區別?會創建一個.lib
文件加快鏈接?
.a
和.lib
都是包含一堆目標文件的存檔。不同之處在於前者是ELF二進制文件,後者是COFF文件(MS COFF)。並且可能您的工具鏈需要一些額外的努力來鏈接非本地對象格式。
P.S. .lib
文件通常也可能包含用於創建動態導入而非COFF對象的存根。而且由於相同的原因(非本地數據格式),它也可能影響構建時間。
P.P.S顯然爲了加快鏈接過程,所有輸入必須具有相同的格式,這是鏈接器原生的。
我'.a'中的目標文件是COFF文件。我在窗戶上,使用產生COFF的mingw工具鏈。 'ar'不關心你想要存檔的內容。它會高興地存檔COFF文件。 – gexicide
'libxxx.a'中的'a'代表* Archive *。它只是一個未壓縮的目標文件存檔。雖然我對Visual Studio使用的'.lib'文件一無所知,但我猜想作爲它的基礎,它們也只是對象文件的存檔。瞭解Windows和Visual Studio可能比這更多,但它的核心仍然可以是對象文件的存檔。 –
@JoachimPileborg:我知道'ar'創建一個檔案。問題是,什麼是.lib文件,它與歸檔有什麼關係。 – gexicide
[相關(如果不重複)]問題](http://stackoverflow.com/questions/2371531/which-format-does-static-library-lib-files-use-where-can-i-find-official)。 –