.so文件【Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据】
so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据
linux下何谓.so文件:
用过windows的同学应该都知道 .dll文件吧, 这二者有什么共通之处呢,其实 .so文件就跟.dll文件差不多
一般来说.so文件就是常说的动态链接库, 都是C或C++编译出来的。与Java比较就是:它通常是用的Class文件(字节码)
Linux下的.so文件时不能直接运行的,一般来讲,.so文件称为共享库
那么.so文件是怎么用的呢?for example:
(1) 动态库的编译
这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
参考2:都是由C或C++编译出来的
-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
(2) 动态库的链接
这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test:
命令:$ gcc test.c -L. -ltest -o test
注:测试是否动态连接,如果列出libtest.so,那么应该是连接正常了
-L.:表示要连接的库在当前目录中
-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称
命令:$ ldd test
注: 执行test,可以看到它是如何调用动态库中的函数的。
参考资料:
什么是.so文件
相关文章
- Linux-----diff命令
- Linux文件空洞与稀疏文件
- 修改linux的最大文件句柄数限制
- Linux 文件转码
- linux中/proc/pid下的各文件分析
- x86 linux下如何交叉编译?
- Linux expect介绍和用法
- XShell上传文件到Linux服务器上
- linux /proc 接口和共享中断
- 利用lsof去查看Unix/Linux进程打开了哪些文件
- 《构建高可用Linux服务器 第3版》—— 3.3 基础正则表达式
- linux mysql Access denied for user ‘root‘@‘localhost‘ (using password: YES) 大坑
- linux centos7 常用命令【systemctl替换service】
- Linux iostat命令详解
- Linux查看物理CPU个数、核数、逻辑CPU个数(转载)
- Linux中mount挂载命令及其概念
- Linux中文件特殊权限suid、sgid、sticky(有图详细讲解)
- Linux 下安装mysql 5.7 --Centos7
- linux 快速生成大文件、测试磁盘的读写IO速度
- 【Linux】linux中删除指定日期之前的文件
- linux查询文件中某几行
- Linux文件查找工具之find “大宝剑”--转载
- Linux下快速清空文件的方法
- Linux常用命令之文件管理