关注

简单理解:DLL 库 和 SO 库

DLL 库 和 SO 库 通俗讲清楚

这俩是操作系统里的「动态链接库」—— 本质就是封装好的代码工具箱,程序运行时才加载,不用打包进 exe 里,节省空间、方便升级。

一、最简单的区别

  • DLL(Dynamic Link Library)Windows 系统专用 的动态库文件后缀:.dll

  • SO(Shared Object)Linux / Unix / Android 系统专用 的动态库文件后缀:.so

一句话:Windows 用 DLL,Linux / 安卓 用 SO,功能一样,系统不同。

二、它们是干嘛的?

  1. 代码复用多个程序可以共用同一个库,不用重复写代码。
  2. 节省体积程序不把库打包进去,运行时才加载。
  3. 方便升级修复 bug 时,只替换 dll/so 文件,不用重新编译整个程序。
  4. 隐藏代码核心算法编译成库,别人看不到源码,只能调用。

三、核心差异(一看就懂)

项目DLL(Windows)SO(Linux)
所属系统WindowsLinux / macOS / Android
文件后缀.dll.so
依赖路径系统目录、当前目录、环境变量LD_LIBRARY_PATH、系统库路径
依赖关系自带依赖,容易缺 DLL依赖系统环境,相对稳定
调用方式LoadLibrary / 隐式链接dlopen / 隐式链接
常见问题DLL 缺失、版本不兼容SO 找不到、版本错误

四、什么时候会用到?

1. 写代码时

  • Windows:编译出 .dll,给 exe 调用
  • Linux:编译出 .so,给二进制程序调用

2. 运行软件时

  • 打开软件提示:找不到 xxx.dll → Windows 缺库
  • 运行程序提示:error while loading shared libraries → Linux 缺 so 库

3. 安卓开发

APP 里的 JNI 底层逻辑,几乎都是 .so 库

五、静态库 vs 动态库(补充)

  • 静态库:.lib(Windows) /.a(Linux)代码直接打包进程序,运行不需要库文件,但程序体积大。

  • 动态库:.dll/.so程序不打包库,运行必须带上库文件,体积小、易升级。

超级总结

  • DLL = Windows 动态库
  • SO = Linux / 安卓 动态库
  • 功能完全一样,只是系统不同
  • 都是给程序提供功能的「代码工具箱」


一、静态库 / 动态库 后缀速记

  • 静态库:.lib
  • 动态库:.dll + 配套.lib(导入库)

Linux / Android:

  • 静态库:.a
  • 动态库:.so

二、GCC 编译:Linux 生成 & 使用 .so

1. 生成动态库 libtest.so

# 编译为位置无关代码 -fPIC
gcc -c -fPIC test.c -o test.o

# 链接生成so动态库
gcc -shared test.o -o libtest.so

2. 主程序调用 so

# 编译主程序,链接动态库
gcc main.c -ltest -L. -o main

# 运行(临时指定库路径)
export LD_LIBRARY_PATH=./
./main

三、Windows MinGW 生成 & 使用 DLL

1. 生成 test.dll

# 编译+生成dll和导入库libtest.lib
gcc -shared test.c -o test.dll -Wl,--out-implib=libtest.lib

2. 主程序调用 DLL

gcc main.c -ltest -L. -o main.exe

运行时把 test.dllmain.exe 放同一目录即可。

四、静态库 快速命令(补充)

Linux 生成 .a

gcc -c test.c
ar rcs libtest.a test.o
gcc main.c libtest.a -o main

Windows MinGW 生成 .lib 静态库

gcc -c test.c
ar rcs test.lib test.o

五、两种调用方式(重点)

  1. 隐式链接(上面命令)编译时就绑定库,简单常用。
  2. 显式动态加载(代码里手动加载)
    • Windows:LoadLibrary() 加载 dll
    • Linux:dlopen() 加载 so适合插件化、按需加载场景。

六、嵌入式 / 安卓补充

Android 交叉编译 .so 只需要换交叉编译器,参数不变:-fPIC -shared 这两个核心参数不变,适配所有嵌入式 Linux。

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2401_82762455/article/details/160564136

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--