PS:Linux与windows的对应起来看
https://blog.csdn.net/chlele0105/article/details/23691147
windows下obj、lib、dll
lib 是静态链接库的库文件
dll 是动态链接库的库文件
obj 是中间代码
因为不可能一次得到目标文件,一个exe需要很多的cpp文件生成,而编译器一次只能编译一个cpp文件,这样编译器编译好一个cpp以后会将其编译成obj,当所有必须要的cpp都编译成obj以后,再统一link成所需要的exe
linux下 .o、.a、.so
.o 是目标文件,相当于windows中的.obj文件
.a 是静态库,是好多个.o合在一起,用于静态连接 ,相当于windows下的lib
.so 是共享库(shared object)用于动态链接,相当于windows下的dll
相对于静态函数库,共享函数库在编译的时候,并没有被编译进目标代码中
当程序执行到相关函数时才调用共享函数库里相应的函数