linux之so文件、a文件、o文件的区别

1、o文件

o 就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件
.o 文件是源码编译出的二进制文件。

你先得了解从源代码到可执行文件的过程。以一个简单的add函数源文件为例。

int add(int a,int b)
{
    return a+b;
}

先预处理为.i文件
gcc -E add.c -o add.i
再编译为汇编文件
gcc -S add.i -o add.s
再汇编为二进制的.o文件
gcc -c add.s -o add.o

好,现在.o文件出来了。它就是C/C++编译的产物,因为C/C++编译的单元编译。每一个.c/.cpp文件就是一个编译单元,把所有单元都编译好之后,再连接成一个完成的程序。




2、a文件

.a文件实质上就是.o文件打了个包。一般把它叫做静态库文件。它在使用的时候,效果和使用.o文件是一样的。
.a 是好多个.o合在一起,用于静态连接 ,即STATIC mode,多个.a可以链接生成一个exe的可执行文件
enable-static 生成静态库a文件




3、so文件

.so 是shared object,用于动态连接的,和windows的dll差不多,使用时才载入。
.so 文件就不一样了,它不是简单的 .o 文件打了一个包,它是一个ELF格式的文件,也就是linux的可执行文件。
.so 文件可以用于多个进程的共享使用(位置无关的才行),所以又叫共享库文件。程序在使用它的时候,会在运行时把它映射到自己进程空间的某一处,其不在使用它的程序中。
enable-shared 生成共享库so文件


你可能感兴趣的:(Linux/Unix积累)