我在这方面需要一点澄清。我觉得条款Static library
& Dynamic Library
是不正确的。静态库和动态库:混乱
- lib1.o + lib2.o + lib3.o - >“LinkerOutputFile”(可执行文件或库)。
如果此“LinkerOutputFile”包含所有文件lib1.o,lib2.o,lib3.o的代码,则其表示“LinkerOutputFile”已链接“LinkerOutputFile”(可执行文件或库)。 (或)
如果 “LinkerOutputFile” 只包含引用其他&信息约到lib1.o,lib2.o,lib3.o不包含这些LIB * .o文件的代码。然后它说“LinkerOutputFile”动态链接。
这是如何使lib * .o文件成为静态库还是动态库?它们只是库文件。
还是说,“LinkerOutputFile”是一个库而不是可执行文件,然后取决于它的静态链接或动态链接其被称为静态库或动态库。对或错?
我知道我错了,因为,我知道,
在大多数Unix式的平台 扩展是
- .A静态库(档案)和
- .so共享库。
在Windows上:
- .DLL表示共享库
- 的.lib表示静态或导入库。
但无法弄清楚我错在哪里。还请告诉我Static library
& Dynamic Library
内部不同。
此外,这是从ABI规格:
本章描述对象文件 格式,称为ELF(可执行和 链接格式)。有三种主要的目标文件类型: 。
甲再定位文件保存代码和数据 适合与其他对象 文件链接到创建可执行或 共享对象文件。
一个可执行文件拥有一个程序 适合执行;文件 指定exec(BA_OS)如何创建 程序的过程映像。
甲共享对象文件保存代码和数据 适于两个 上下文进行链接。首先,链接编辑器[请参阅 ld(BA_OS)]处理共享对象 文件与其他可重定位和共享的 对象文件,以创建另一个对象 文件。其次,动态链接器 将其与可执行文件 和其他共享对象组合以创建过程映像。
“共享对象文件”是用于说动态库(具有* .so扩展名)的其他词。但是“静态库”呢?这甚至没有提到它。
“可重定位”&“静态库”&“导入库”是否有区别?请以内部结构说明我。
请注意,用于静态和动态链接的'.o'文件不同(请参阅'-static'选项的gcc参考)。您的问题的答案在这里:http://stackoverflow.com/questions/1210787/relation-between-object-file-and-shared-object-file/1210857#1210857 – 2010-10-02 13:18:09
可能重复的[静态和共享库之间的差异?](http://stackoverflow.com/questions/2649334/difference-between-static-and-shared-libraries) – 2012-04-06 05:31:09