so文件(Shared Object File)是类Unix系统(如Linux)中的动态链接库文件,其扩展名通常为 .so。它类似于Windows系统中的DLL(Dynamic Link Library)文件,用于在程序运行时提供共享的代码和数据。
so文件允许不同的程序在运行时动态加载和使用相同的库函数,从而节省内存并实现代码复用。
so文件基于ELF(Executable and Linkable Format)格式,主要包含以下几个部分:
readelf -h libexample.so 命令查看so文件的ELF头信息。以下是一个简单的C语言示例,展示如何编译生成so文件:
// mathlib.c
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
编译为共享库:
gcc -fPIC -shared -o libmathlib.so mathlib.c
在主程序中调用:
#include <stdio.h>
#include <dlfcn.h>
int main() {
void *handle = dlopen("./libmathlib.so", RTLD_LAZY);
int (*add)(int, int) = dlsym(handle, "add");
printf("Result: %d\n", add(3, 4));
dlclose(handle);
return 0;
}
so文件广泛应用于: