1.静态库的制作

1.1静态库的命名

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

nm 静态库名
1.2静态库的制作步骤

\qquad第一步:将.c文件生成.o文件,比如将hello.c转变为hello.o文件。

gcc -c hello.c -o hello.o

\qquad或者

gcc hello.c -c

\qquad第二步:使用ar将生成的.o文件打包

ar rcs 静态库的名字 生成的所有.o文件
1.3发布和使用静态库
gcc filename.c 静态库的路径/静态库名 -o 可执行文件名 -I 头文件的路径

\qquad或者

gcc filename.c -I 头文件路径 -L 静态库路径 -l 静态库名 -o 可执行文件名

2.静态库的优缺点

2.1静态库的优点

\qquad 1.发布的程序,即编译完成后的可执行文件,不再需要库函数。
\qquad 2.加载库的速度快

2.2静态库的缺点

\qquad 1.库被打包到应用程序中,导致应用程序体积变大。
\qquad 2.库如果发生了改变,需要重新编译。

3.静态库制作实例

  1. 源代码目录
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│   ├── add.h
│   └── mul.h
├── lib
│   ├── main.c
│   └── mul.c
└── source└── add.c3 directories, 5 files
  1. 生成静态库

这里的静态库不包含主函数的.c文件,只是把实现打包成静态库,

首先将功能模块的.c文件编译为.o文件,

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

然后生成静态库

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

linux的常用操作——静态库相关推荐

  1. linux的常用操作——共享库

    1.共享库的命名规则 \qquad共享库,即动态库.库名: lib+库名+.so 2.共享库的制作 2.1生成与位置无关的.o文件 gcc -fpic -c filename.c -I 头文件路径 2 ...

  2. linux系统下的“静态库和动态库”专题之二:库的创建和使用

    接上文[linux系统下的"静态库和动态库"专题之一:库的概念和规则]所述,我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种. – 静态库在程序编译 ...

  3. linux系统下的“静态库和动态库”专题之一:库的概念和规则

    什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的本质不同,因此二者的库也是不兼 ...

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

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

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

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

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

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

  7. Linux快速入门之 静态库和动态库 (07)

    文章目录 7.静态库和动态库 7.1 Linux下静态库 7.1.1生成静态库 7.1.2静态库使用 7.2 Linux下动态库 7.2.1 生成动态库 7.2.2 制作动态库 7.2.3 动态库的使 ...

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

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

  9. linux c 如何编译静态库,Linux C 编程入门之一:gcc 编译动态库和静态库

    主调用程序源代码3-1:main.c /** * main.c */ #include #include #include "hello_fn.h" int main () { h ...

最新文章

  1. Matlab编程与数据类型 -- continue、break和return语句
  2. .NET常用工具类(Utils.cs)
  3. 程序员新动向!大龄困惑详解!
  4. python第三方库-基础
  5. vite:15个插件推荐
  6. aforge 学习-命名空间中文理解
  7. 国际象棋八皇后问题----解决办法
  8. 【读论文0623】The Devil Is in Classification: A Simple Framework for Long-Tail Instance Segmentation
  9. *oulapp的双向证书破解
  10. 硬件工程师成长之路(0)----认识元件
  11. Java PermGen 去哪里了?
  12. 进阶篇:3.9)3d打印件设计
  13. 互联网产品上线前,做些什么——产品、开发、测试的视角
  14. 奋斗在奇矩互动的日子
  15. Java程序员面试时,应当注意HR面的十三个小套路,纯干货分享
  16. JDBCUtils工具库
  17. iPhone彻底删除照片如何恢复?3个恢复方法推荐
  18. 【挨踢人物传】Vage:高级DBA的突破之路(第13期)
  19. 滴滴持续扩招私车 倒逼官方就范
  20. Awesome-Fashion:较大规模公开的服装数据集

热门文章

  1. LeetCode 1705. 吃苹果的最大数目(优先队列)
  2. LeetCode 1122. 数组的相对排序
  3. 【机器学习】逻辑回归—良/恶性乳腺癌肿瘤预测
  4. 2.Redis数据操作
  5. for循环利用可迭代对象与迭代器完成工作的本质
  6. 探索性数据分析EDA及数据分析图表的选择
  7. 用promise封装ajax_ES6-promise封装AJAX请求
  8. 专心做搜索也能登顶CLUE分类榜?在快手做搜索是一种怎样的体验
  9. ACL'21 | 弱标签的垃圾数据,也能变废为宝!
  10. 炼丹必备!推荐一个超级好用的机器学习云平台