linux中.o时什么文件,Linux的.a、.so和.o文件

windows下obj, lib, dll, exe的关系

lib是和dll对应的。lib是静态链接库的库文件,dll是动态链接库的库文件。

所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe文件中,以后运行你的exe的时候不再需要lib。

所谓动态就是exe运行的时候依赖于dll里面提供的功能,没有这个dll,你的exe无法运行。

lib,dll,exe都算是最终的目标文件,是最终产物。而c/c++属于源代码。源代码和最终目标文件中过渡的就是中间代码obj,实际上之所以需要中间代码,是你不可能一次得到目标文件。比如说一个exe需要很多的cpp文件生成。而编译器一次只能编译一个cpp文件。这样编译器编译好一个cpp以后会将其编译成obj,当所有必须要的cpp都编译成obj以后,再统一link成所需要的exe,应该说缺少任意一个obj都会导致exe的链接失败。

linux .o, .a, .so

对比Windows下的文件:.o,是目标文件,相当于windows中的.obj文件

.so 为共享库,是shared object,用于动态连接的,相当于windows下的dll

.a 为静态库,是好多个.o合在一起,用于静态连接

.a静态函数库

特点:实际上是简单的普通目标文件的集合,在程序执行前就加入到目标程序中。

优点:可以用以前某些程序兼容;描述简单;允许程序员把程序link起来而不用重新编译代码,节省了重新编译代码的时间(该优势目前已不明显);开发者可以对源代码保密;理论上使用ELF格式的静态库函数生成的代码可以比使用共享或动态函数库的程序运行速度快(大概1%-5%)

生成&#x

你可能感兴趣的:(linux中.o时什么文件)