我想静态编译的东西,我试图得到所有这些依赖关系的处理。我知道.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