我想靜態編譯的東西,我試圖得到所有這些依賴關係的處理。我知道.dll文件適用於最終輸出需要的動態鏈接依賴關係,但.a和.lib文件是什麼,以及什麼時候需要這些文件?.lib和.a文件有什麼區別?
回答
.a是代碼存檔:已編譯但未鏈接。在程序的最終鏈接步驟中,您可以靜態鏈接它。
.lib可以與.a相同,也可以是一個神奇的所謂「導入庫」:一個很薄的佔位符,它使您在運行時需要一個.dll文件。
通常,.A是Linux下的靜態庫,而的.lib是相同的,但在Windows上。但當然這只是一個慣例。
在Unix系統上,您有.a
文件。這些是對象文件的簡單歸檔文件(.o
)。
在Windows上,有.lib
文件,這些文件是完全相同的,但是對於Windows而不是Unix。
一個額外的細節是,爲了鏈接一些代碼與DLL(在Windows上),你必須鏈接到一個.lib
文件,其中包含調用該DLL的簡單包裝。在Unix系統上,傳統上不需要這樣的包裝(鏈接器足夠聰明,可以隨時生成它們)。
謝謝你的回答,發現我試圖用Windows標誌在某處編譯! :) – 2012-12-04 21:56:37
在windows和unix中創建的.a有沒有區別? – samnaction 2017-01-17 12:15:56
我在這裏沒有看到的東西還有一個令人驚訝的事實,即至少在某些時候,.a文件和.lib文件實際上是,它們是。儘管我在mingw網站上找不到任何內容,但我注意到,當試圖將MS Visual C++的64位編譯器cl.exe鏈接到使用mingw-w64 g ++編譯器生成的.dll文件中時,它很高興地接受命令行
cl /EHsc /Ipath\to\include gmp_test.cpp path\to\lib\libgmp.dll.a
所得.exe文件,因爲我把相應的.dll文件的副本在當前目錄正確地儘快跑。 (它確實咕噥了警告。 「命令行警告D9024:無法識別的源文件類型 '路徑\到\ LIB \ GMP-6.0.0 \ LIB \ libgmp.dll.a',對象文件假定」)
進一步的證據是Linux file
命令爲我試過的每個擴展名(.lib或.a)的幾個文件報告「current ar archive」。
- 1. A a有什麼區別?和A a();?
- 2. .dll,.lib,.h文件有什麼區別?
- 3. a,&a和* a有什麼區別?
- 4. .o文件和.lib文件有什麼區別?
- 5. symfony中lib /和plugins /有什麼區別?
- 6. .LIB和.OBJ文件有什麼區別? (Visual Studio C++)
- 7. 'open -a TextMate.app'和'mate'有什麼區別?
- 8. 「new A()」和「A.newInstance()」有什麼區別?
- 9. A == B對B == A,有什麼區別
- 10. 在Strawberry Perl中,perl \ lib和perl \ site \ lib有什麼區別?
- 11. /usr/local/lib/python2.6和/usr/lib/python2.6有什麼區別?
- 12. 在Perl中,`use lib`和`lib-> import`有什麼區別?
- 13. simple project/lib和project/web/WEB-INF/lib有什麼區別?
- 14. a + = b和a = + b之間的區別是什麼,a ++和++ a?
- 15. io_submit和O_ASYNC文件有什麼區別
- 16. .out和.log文件有什麼區別
- 17. XIB和NIB文件有什麼區別?
- 18. .sqlite和.db文件有什麼區別?
- 19. .bin和.dat文件有什麼區別?
- 20. MDB和SDF文件有什麼區別?
- 21. .class和.dex文件有什麼區別?
- 22. * .bat和* .cmd文件有什麼區別?
- 23. .htc和.js文件有什麼區別?
- 24. apklib和jar文件有什麼區別?
- 25. 在git中,A..B和A ... B有什麼區別?
- 26. swap(int&a,int&b)和swap(int * a,int * b)。有什麼區別?
- 27. 在JavaScript中,var a = 5有什麼區別。和var a = 5?如
- 28. MatLab中的[A,B]和[A; B]有什麼區別?
- 29. 演員之間有什麼區別:(A)x和x爲A?
- 30. a // b和int(a/b)之間有什麼區別?
我正在用.a OpenSSL庫編譯QT框架,但不知何故,QT生成的最終可執行文件仍需要外部OpenSSL dll才能運行。你有什麼想法,因爲我正在使用.a庫,情況如何? – Nantucket 2010-02-26 00:09:00
如何編譯OpenSSL .a的內容? 你如何鏈接你的最終可執行文件? – crazyscot 2010-02-26 08:52:54
我不確定「在運行時需要.dll」。如果您的項目使用.lib靜態庫(除非存在未正確識別的.dll依賴項),則不需要.dll。 – ha9u63ar 2014-08-26 07:10:52