.o文件和.lib文件有什么区别?.o文件和.lib文件有什么区别?
回答
一个.LIB文件是与 指数连接在一起.OBJ 文件的集合。链接器如何处理也不应该有任何差异 。
从这里引:
What is the difference between .LIB and .OBJ files? (Visual Studio C++)
它们实际上是相当不同的,特别是与旧的接头。
.o(或.obj)文件是目标文件,它们包含编译器生成代码的输出。它仍处于中间格式,例如,大多数参考文献仍未解决。通常在源文件和目标文件之间有一对一映射。
.a(或.lib)文件是档案,也称为库,是一组目标文件。
所有操作系统都有工具,允许您添加/删除/列出目标文件到库文件。
另一个区别,特别是对于较老的连接器,在连接文件时如何处理这些文件。有些链接会将完整的目标文件放入最终的二进制文件,而不管实际使用的是什么,而只会从库文件中提取有用的信息。
现在大多数链接器都足够聪明,可以删除所有未使用的东西。
最后一句话很大程度上是错误的。 – 2010-12-09 14:41:40
从概念上讲,编译单元(源文件/目标文件中的代码单元)完全链接或根本不链接。虽然的某些实现在编译器和链接器之间具有显着的协作级别,但它们能够在链接时从目标文件中删除未使用的代码,但它不会更改在程序中包含具有冲突的符号名称的2个编译单元的问题一个错误。
作为一个实际的例子,假设你的函数库有两个函数foo
和bar
,它们在一个目标文件中。如果我想使用bar
,但我的程序已经有一个名为foo
的外部符号,那么我会遇到一个错误。即使该实现可能能够为我解决这个问题,该代码仍然不正确。另一方面,如果我有一个库文件包含两个单独的目标文件,一个使用foo
,另一个使用bar
,则只有包含bar
的目标文件将被拉入我的程序。
编写库时,应避免在同一个对象文件中包含多个函数,除非它们必须一起使用。这样做会增加链接库(静态)的应用程序并增加符号冲突的可能性。就个人而言,如果存在疑问,我更喜欢在单独文件的一边犯错 - 如果后者不平凡,则将foo_create
和foo_free
放在单独的文件中甚至是有用的,以便不需要调用foo_free
的短的一次性程序可以避免拉入用于深度释放的代码(并且甚至可能避免牵扯到free
本身的实现)。
- 1. .lib和.a文件有什么区别?
- 2. .dll,.lib,.h文件有什么区别?
- 3. .LIB和.OBJ文件有什么区别? (Visual Studio C++)
- 4. crt0.o和crt1.o - 有什么区别?
- 5. .Kdb文件,.jks文件和CMS文件有什么区别?
- 6. io_submit和O_ASYNC文件有什么区别
- 7. .out和.log文件有什么区别
- 8. XIB和NIB文件有什么区别?
- 9. .sqlite和.db文件有什么区别?
- 10. .bin和.dat文件有什么区别?
- 11. MDB和SDF文件有什么区别?
- 12. .class和.dex文件有什么区别?
- 13. * .bat和* .cmd文件有什么区别?
- 14. .htc和.js文件有什么区别?
- 15. apklib和jar文件有什么区别?
- 16. HDF5:“文件缓冲区”和“文件缓存”有什么区别?
- 17. .o目标文件和.so库文件之间的区别是什么?
- 18. .cfg文件和.xml文件有什么区别?
- 19. 有什么区别[pandas.read_csv(文件名)]和[pandas.DataFrame.from_csv(文件名)]
- 20. app.config文件和XYZ.settings文件有什么区别?
- 21. ELF文件和bin文件有什么区别?
- 22. .po和.pot文件的文件内容有什么区别?
- 23. Express文件结构和Yeoman文件结构有什么区别?
- 24. mysql.log文件和mysqld.log文件有什么区别?
- 25. 文件描述符和文件指针有什么区别?
- 26. symfony中lib /和plugins /有什么区别?
- 27. 大O和大Omega有什么区别?
- 28. 这两个文件有什么区别?
- 29. `eml`文件和RFC822电子邮件有什么区别?
- 30. char *文件名[1]或char *文件名有什么区别?
在什么方面?文件格式?用法?资源? – tenfour 2010-12-09 14:27:20