1.共享库的命名规则

\qquad共享库,即动态库。库名: lib+库名+.so

2.共享库的制作

2.1生成与位置无关的.o文件
gcc -fpic -c filename.c -I 头文件路径
2.2生成共享库
gcc -shared -o 共享库名 要打包的.o文件 -I 头文件路径
2.3生成可执行文件
gcc filename.c 动态库路径/库名 -o 可执行文件名 -I 头文件路径

3.动态库无法被加载

\qquad查看可执行文件动态库加载情况

ldd 可执行文件

\qquad 需要找动态连接器的配置文件 ld.so.conf

sudo vim /etc/ld.so.conf

\qquad 动态库的绝对路径写到配置文件中
\qquad 更新——sudo ldconfig

4.动态库实例

  1. 目录结构
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│   ├── add.h
│   └── mul.h
├── lib
│   ├── add.c
│   └── mul.c
└── source└── main.c3 directories, 5 files
  1. 制作动态库

生成与位置无关的.o文件

zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ gcc -fpic -c mul.c add.c -I ../head/
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ tree
.
├── add.c
├── add.o
├── mul.c
└── mul.o0 directories, 4 files

生成动态库

zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ gcc -shared -o libmylib.so mul.o add.o -I ../head/
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ tree
.
├── add.c
├── add.o
├── libmylib.so
├── mul.c
└── mul.o0 directories, 5 files
  1. 生成可执行文件
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ gcc main.c ../lib/libmylib.so  -o app -I ../head/
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ tree
.
├── app
└── main.c0 directories, 2 files
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ ./app
a+b=19,a*b=90

5. 动态库的优缺点

\qquad优点:执行程序的体积小;动态库更新了,不需要重新编译程序。
\qquad缺点:发布程序时,需要把动态库提供给用户;动态库没有加载到应用程序中,所以加载速度会比静态库慢一些。

linux的常用操作——共享库相关推荐

  1. linux的常用操作——静态库

    1.静态库的制作 1.1静态库的命名 \qquad静态库一律使用lib打头,静态库名为:lib+静态库的名字+.a.比如:libmylibrary.a,这里面lib和.a是必须要有的.使用nm命令可以 ...

  2. linux的常用操作——查看和修改文件权限

    linux的常用操作--查看和修改文件权限 #1.查看当前用户 whoami#2.查看文件权限(r:read;w:write,x:execute) ls -l#3.修改文件\目录权限 chmod [w ...

  3. linux的常用操作——用户的添加、删除和查看

    linux的常用操作--用户的添加.删除和查看 #1.添加用户(用户名无大写字母) sudo adduser mumu passwd mumu #添加密码#2.添加用户(用户名中含有大写字母) #首先 ...

  4. Linux防火墙常用操作及端口开放

    Linux防火墙常用操作及端口开放 1.查看防火墙状态 firewall-cmd --state 2.开启防火墙 systemctl start firewalld.service 3.开启指定端口 ...

  5. Linux动态加载共享库,Linux共享库的动态加载(附测试案例)

    共享库的动态加载是指可以在程序运行的过程中去加载所需的共享库.常用于某些系统或者应用程序的自动升级. 在C语言的源程序动态加载共享库,需要调用一组特殊的函数,它们被声明于一个专门的头文件dlfcn.h ...

  6. Linux shell常用操作指令(0)

    首先,说一下我跟Linux的接触的历史吧!第一次接触是在大一下学期的3月份,当时我参加了一个科创学习,接触到了有小型计算机之称的树莓派,在那段时间跟随老师从一开始的给树莓派烧录镜像到树莓派的一些基本配 ...

  7. linux:命令常用操作

    linux: 1,root操作: 2.内核系统操作 3.设备查看 4.截屏操作 5 设备内存管理 6 文件操作 新建文件 切换路径 7.内存操作 常用命令类型: ①yum命令 ②apt命令 ③ 1,r ...

  8. 在linux上实现DllMain + 共享库创建方法

    DllMain可以在dll加载到进程.线程时调用,可以做些初始化.清理的工作 但在linux上没有专门的函数,可以使用gcc扩张属性__attribute__((constructor)) and _ ...

  9. [Linux][Ubuntu]Linux实习常用操作/Debug总结

    一. Win下装Jupter 1.安装anaconda 配置环境变量 打开jupyter 2.切换目录 装软件 二. 移动复制粘贴上锁文件 sudo nautilus 三. 视频播放 sudo nan ...

最新文章

  1. Nginx 性能调优实战
  2. C++_可变参数模板到emplace_back再到construct再到forward
  3. Android中贝塞尔曲线的绘制方法
  4. 实现远程连接MySQL
  5. A Simple Math Problem 矩阵打水题
  6. queue初始化java,如何在java中实例化一个Queue对象?
  7. MPlayer源代码分析
  8. mysql可以装到其他端口吗_linux下怎么在另一个端口安装高版本mysql
  9. activitygroup
  10. AD17入门简单教程(一)
  11. 计算机毕业设计Java社区团购系统(源码+系统+mysql数据库+Lw文档)
  12. 基于DFS的拓扑排序算法实现
  13. 常见面试题之布隆过滤器的使用案例(海量数据)
  14. 虚拟化桌面设备输入法
  15. 微信开发者工具 Source Map 的使用
  16. 【Excel函数】隔行取数并取最大值
  17. 计算机上的游戏怎么不见了怎么办,电脑桌面上的游戏图标不见了怎么办
  18. EasyPoi的excel模板预览与下载、导出简单/复杂数据
  19. 新版逍遥模拟器配置Fiddler抓包环境遇到的问题 笔记
  20. Linux命令-完整手册

热门文章

  1. 天池 在线编程 队列检查(排序)
  2. EM(期望极大化)算法及其推广
  3. LeetCode 942. 增减字符串匹配
  4. LeetCode 429. N叉树的层序遍历(queue)
  5. 如何选择数据结构和算法(转)
  6. python2d 平滑插值处理_python中平滑的、通用的2D线性插值
  7. 漂亮的html页面源码_爬虫数据分析之html
  8. 为什么要给计算机配置IP地址,更改ip地址 为何要重启电脑
  9. 12.MYSQL高级(二)
  10. Maven详解及实例