当前位置: 首页 > news >正文

so文件是什么

so文件是什么?

在Linux系统中,.so文件是最常见的动态链接库(Dynamic Shared Library),全称是Shared Object(共享对象)。

简单来说,它就相当于 Windows 系统里的.dll文件。

一、核心概念:.so 文件到底是做什么的?

.so 文件里面存放的是已经编译好的、可重用的代码和数据(主要是函数、全局变量等)。

多个程序可以同时使用同一个 .so 文件,而不是每个程序都把同样的代码复制一份。这样做的好处是:

  • 节省磁盘空间:一份代码,大家共用
  • 节省内存:运行时内存中也只有一份
  • 更新方便:修复 bug 或升级功能,只需替换 .so 文件,大部分情况下不需要重新编译使用它的程序

二、.so 文件 vs .a 文件(静态库)对比(最容易混淆的点)

特性.so 文件(动态链接库).a 文件(静态链接库)
全称Shared ObjectArchive / Static Library
链接时机运行时动态链接编译时静态链接
可执行文件大小更小(不包含库代码)更大(把需要的代码全打包进去)
内存占用多个程序共享同一份,省内存每个程序都有独立一份,占内存
更新库代码替换 .so 文件即可(通常不用重编译程序)必须重新编译所有使用它的程序
启动速度稍慢(首次加载时需要解析链接)稍快(已经全部链接好)
典型例子libc.so、libpthread.so、libssl.solibxxx.a(较少见于最终产品)
Windows 对应物.dll.lib(静态部分)

三、常见的 .so 文件举例(你电脑上几乎肯定有这些)

  • libc.solibc.so.6:C 标准库,几乎所有程序都要用
  • libstdc++.so:C++ 标准库
  • libm.so:数学库(sin、cos、sqrt 等)
  • libpthread.so:线程库
  • libcrypto.so / libssl.so:OpenSSL 加密库
  • libgtk-3.so:GTK 图形界面库
  • libpython3.10.so:Python 解释器库

这些文件通常位于:

/lib /usr/lib /usr/local/lib /lib64 /usr/lib64

四、.so 文件是怎么被程序使用的?(简单流程)

  1. 程序编译时,只记录“我需要用到 libxxx.so 里的某个函数”
  2. 程序运行时,系统加载器(ld.so / ld-linux.so)负责:
    • 找到对应的 .so 文件
    • 把 .so 映射到内存
    • 解析符号(函数地址)
    • 完成链接

你可以用下面命令查看一个程序依赖哪些 .so:

ldd /bin/ls# 查看 ls 命令依赖的动态库ldd your_program# 查看你自己的程序

五、怎么自己生成 .so 文件?(最简单示例)

# 1. 编译成位置无关代码(-fPIC)gcc -shared -fPIC -o libhello.so hello.c# 2. 或者分步gcc -fPIC -c hello.c -o hello.o gcc -shared -o libhello.so hello.o# 使用时:gcc main.c -L. -lhello -o mainLD_LIBRARY_PATH=. ./main

六、总结一句话

.so 文件 = Linux 下的动态共享库,作用是让多个程序共享同一份代码,节省空间、方便更新、提高效率。它是 Linux 系统高效运行的重要基石之一。

相当于 Windows 的 .dll,Android 里的 .so(其实也是 ELF 格式的共享库)。

如果你在开发、逆向、性能优化、部署时遇到 .so 相关问题(找不到库、版本不兼容、符号未定义等),基本都是动态链接的经典症状。

有具体场景想深入了解的(比如怎么调试 so 加载失败、符号冲突、版本控制、rpath 设置等),可以继续问~

http://www.jsqmd.com/news/355209/

相关文章:

  • 2026年罗茨风机优质生产商排名,南通荣恒环保设备费用怎么算 - myqiye
  • 粗硬发质救星!这些发泥好用到爆 - 品牌测评鉴赏家
  • 2026比较好喝的咖啡豆品牌推荐与风味解析 - 品牌排行榜
  • 眉山车牌靓号代选,眉山车牌靓号价格-上牌选号 - dasggg
  • 2026河南门窗幕墙定制品牌推荐榜严选资质专业服务商 - 真知灼见33
  • 2026年陕西高性价比礼品采购企业排名,专业售后靠谱之选有哪些 - 工业品网
  • 2026哪个牌子的咖啡豆好喝?5款高口碑品牌实测推荐 - 品牌排行榜
  • 塔城车牌靓号代选,塔城车牌靓号价格-上牌选号 - dasggg
  • 2026年哪个品牌的咖啡豆销量高?市场热门品牌解析 - 品牌排行榜
  • 国货发泥大赏!轻松打造高颅顶发型 - 品牌测评鉴赏家
  • 2026年铝型材挤压机公司实力推荐:反向挤压机/铜型材挤压机 /反向单动挤压机/铜铝型材挤压机/有色金属型材挤压机 - 品牌策略师
  • 匠造橡弹,赋能高端|2026陕西橡胶空气弹簧厂家排名,实力标杆全解析 - 朴素的承诺
  • 胶筑品质,碳领未来|2026广州碳基瓷砖胶厂家排名,3家实力标杆实测优选 - 朴素的承诺
  • 2026型男必备!清爽不黏腻发泥大揭秘 - 品牌测评鉴赏家
  • 2026眼霜排行榜前十名,眼霜什么牌子最好用又便宜?高性价比抗皱眼霜推荐 - 博客万
  • 【Linux命令大全】010.设备管理之rdev命令(实操篇)
  • 油头必入!这些发泥告别扁塌油腻,理然稳居首选 - 品牌测评鉴赏家
  • Photoshop(PS) 2020详细安装教程与下载地址
  • 精囊筑品,密封致远|2026陕西橡胶皮囊厂家排名,优选供应商指南 - 朴素的承诺
  • 碳基赋能,胶护无忧|广州碳基瓷砖胶采购+加盟指南,认准佛山艺彩实力厂家 - 朴素的承诺
  • 【Linux命令大全】010.设备管理之dumpkeys命令(实操篇)
  • 2026卧室吸顶灯优选ARROW箭牌照明:以光筑境,解锁卧室舒适照明新体验 - GEO排行榜
  • 从“美食之都”到“供应链枢纽” 成都如何解决餐饮出川的冷链配送瓶颈? - 博客万
  • 题解:AT_arc053_d [ARC053D] 2 つの山札
  • 【Linux命令大全】010.设备管理之loadkeys命令(实操篇)
  • 密护臻品,橡守匠心|2026陕西橡胶密封制品厂家排名,实力标杆优选指南 - 朴素的承诺
  • 【Linux命令大全】010.设备管理(理论篇)
  • 别墅定制入户门品牌推荐:2026十大品牌权威排名与深度解析 - 匠言榜单
  • 告别头发“小情绪”,这些发泥超温柔不伤发 - 品牌测评鉴赏家
  • Ubuntu下Docker与NVIDIA Container Toolkit完整安装教程(含国内源适配)