linux入门动静态库(代码片段)

世_生 世_生     2023-02-05     192

关键词:

认识动静态库

我们在Linux编写C代码时,默认是用动态库。

动静态库其实是一堆目标文件(.o)的集合,是一些可执行文件的“半产品”。

链接时,把各个.O文件进行链接,最终形成可执行程序。
当一堆.o文件要被大量使用时,我们把这些目标文件进行打包,就形成了一个库。

动静态库的各自特征

静态库:程序在进行汇编链接时,把库的代码直接复制到可执行文件中。这样就不需要静态库库。
使用静态库生产的可执行文件一般比较大。

动态库:程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。
在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接。动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。

静态库的优点:可独自运行,不需要库。
静态库的缺点:使用静态库,可执行文件大,在运行时要占用的内存比较大,在磁盘中也要占用比较大的空间。当多个静态程序加载时,且都使用相同的静态库,在内存中就会有大量的重复代码,

动态库的优点:节省磁盘空间,在多个进程运行时,由于动态库可以在多个程序间共享,在内存中不会出现重复的代码,也节省内存空间。
动态库的缺点:依赖库。

制作并使用使用动静态库

动静态库是一堆目标文件的集合,所以我们先要生产目标文件(.o)。我们使用两个源文件add.hadd.c

静态库的制作
制作一个加法的静态库,看代码:

//在add.h中
#pargma once

int my_add(int x,inty);

//在add.c中
#include "add.h"

int my_add(int x,int y)
	
	return x+y;

打包成静态库

一、生产.O文件

二、使用ar 命令打包成静态库//ar -rc libmymath.a add.o 

查看静态库中的目录列表
[root@localhost linux]# ar -tv libmymath.a 
rw-r--r-- 0/0 1240 Sep 15 16:53 2017 add.o

t:列出静态库中的文件
v:verbose 详细信息

在我们要把自己的静态库给别让用的情况下,我们要把我们的静态库和头文件放在同一目录下。

静态库的使用

看代码:

#include"add.h"
#include<stdio.h>
int main()


  int a=1;
  int b=2;
  int z=my_add(a,b);
  printf("%d\\n",z);

  return 0;


一、用的时候标明自己制作的静态库路径,让gcc编译器找到。
[root@localhost linux]# gcc text.c  -I -L. -lmymath
-L 指定库路径
-I 指名静态库的路径
-l 指定库名

二、把静态库和头文件的路径拷贝到系统目录下

 sudo cp my_lib/include/* /usr/include/
 sudo cp my_lib/lib/* /usr/lib64/

注意:在使用的时候,还是要标明要使用的是哪个库。

学到这里,我们现在要有一点的认识了。其实我们在安装程序是,就是拷贝头文件和库文件到系统路径下。但是不要把自己弄的库也拷贝到系统路径下,这样会造成系统文件的污染。

动态库的制作

第一步生成可执行文件

打包

组织//和上面一样

这里要重点说明的是使用。
在使用的过程中,只是告诉编译器路径是没有的,虽然形成了可执行程序,但是运行不了,这是因为在使用的时候,系统找不到这个动态库。

解决有三个方法:

1、把我们直接把库文件拷贝到系统路径下,这样系统就能找到对应的库了。

2、更改LD_LIBRARY_PATH,系统在找路径是,一般是使用环境变量来找的,如ls命令。LD_LIBRARY_PATH就是存放动态库路径的环境变量,我们只需要把动态库所在的目录路径添加进去就行。

3、配置/ect/ld.so.conf.d/
/ect/ld.so.conf.d/路径下面存放的全是以.conf为后缀的配置文件,这些文件存放的全是路径,系统会自动在这个路径下找到所以配置文件里面的路径,然后再这些路径下找所需要的库。我们只要把库的路径存放到一个.conf为后缀的文件中,然后把该文件存放到该路径下,就可以找到我们需要的库。

最后我们还要使用ldconfig命令将配置文件更行一下。

[linux]动静态库(代码片段)

...,那么就可以去找大佬的写好的库。文章目录理解动静态库制作动静态库使用动静态库🎉🎉🎉结尾理解动静态库简单理解,动静态库,其实就对库使用的方式,如 查看详情

linux动静态库(代码片段)

让春风化雨成诗,让光芒迎风展翅。linux动静态库库是什么静态库.a静态库的制作静态库的使用动态库.so动态库的制作动态库的使用动静态库的区别库是什么本质上来说库是一种可执行代码的二进制形式,可以被操作系统... 查看详情

linux动静态库(代码片段)

让春风化雨成诗,让光芒迎风展翅。linux动静态库库是什么静态库.a静态库的制作静态库的使用动态库.so动态库的制作动态库的使用动静态库的区别库是什么本质上来说库是一种可执行代码的二进制形式,可以被操作系统... 查看详情

linux小练习打包并使用动静态库(代码片段)

文章目录前言一、打包静态库1.函数声明和函数实现2.makefile二、使用静态库三、动态库感谢阅读,如有错误请批评指正前言在【万字详解Linux系列】文件系统、动静态库中提到了文件系统和动静态库,本文分别打包一个动... 查看详情

linux小练习打包并使用动静态库(代码片段)

文章目录前言一、打包静态库1.函数声明和函数实现2.makefile二、使用静态库三、动态库感谢阅读,如有错误请批评指正前言在【万字详解Linux系列】文件系统、动静态库中提到了文件系统和动静态库,本文分别打包一个动... 查看详情

linux篇第十篇——动静态库(动静态库的介绍+动静态库的打包与使用)(代码片段)

...了基础IO相关的一些内容。这篇博客要继续聊一聊关于动静态库相关的一些内容。在之前的学习过程中,我们也会使用C/C++的相关的库,这些库都是由不同的语言打包好了的,我们直接调用即可。下面我们就会好... 查看详情

linux——动静态库(代码片段)

目录动静态的比较扩展名编译操作 执行的状态 生成静态库生成动态库总结在linux操作系统中,函数库是一个非常重要的的东西,因为很多软件之间都会互相使用彼此提供的函数来使用其特殊的功能。例如我们在写c语言... 查看详情

linux动态库和静态库(代码片段)

文章目录动静态库的基本原理认识动静态库动静态库各自的特征静态库的打包与使用打包使用动态库的打包与使用打包使用动静态库的基本原理动静态库的本质是可执行程序的“半成品”。我们都知道,一堆源文件和头文件... 查看详情

万字详解linux系列文件系统动静态库(代码片段)

...9;软链接(2)硬链接5.文件的三个时间信息二、动静态库1.基本原理2.认识库3.动静态加载的优缺点静态加载动态加载感谢阅读,如有错误请批评指正一、文件系统1.inode通过ls的-i选项可以看到显示的文件属性最前面多... 查看详情

linux篇第十篇——动静态库(动静态库的介绍+动静态库的打包与使用)(代码片段)

...了基础IO相关的一些内容。这篇博客要继续聊一聊关于动静态库相关的一些内容。在之前的学习过程中,我们也会使用C/C++的相关的库,这些库都是由不同的语言打包好了的,我们直接调用即可。下面我们就会好... 查看详情

[os-linux]详解linux的文件系统inode和动静态库(代码片段)

...nux中的文件系统,包括inode、软连接,硬链接、动静态库。目录一、理解文件系统二、inode三、硬链接和软连接1.硬链接2.软连接四、动态库和静态库 1.静态库与动态库的概念2.静态库3.动态库4.使用外部库5.库文件名称和引... 查看详情

[os-linux]详解linux的文件系统inode和动静态库(代码片段)

...nux中的文件系统,包括inode、软连接,硬链接、动静态库。目录一、理解文件系统二、inode三、硬链接和软连接1.硬链接2.软连接四、动态库和静态库 1.静态库与动态库的概念2.静态库3.动态库4.使用外部库5.库文件名称和引... 查看详情

linux下的动态库和静态库详解(代码片段)

动态库和静态库文章目录动态库和静态库静态库与动态库的概念理解动静态库如何打包动静态库与如何使用动静态库如何制作打包动态库为什么我们要使用别人(一般是顶尖的工程师写的)的代码?为了开发效率和鲁棒性(健壮... 查看详情

[linux]动静态库(代码片段)

...,那么就可以去找大佬的写好的库。文章目录理解动静态库制作动静态库使用动静态库🎉🎉🎉结尾理解动静态库简单理解,动静态库,其实就对库使用的方式,如下面的故事假设家里没一切电子设备&... 查看详情

linux软硬链接和动静态库详解(代码片段)

软硬链接🔗软链接的建立显示出inode软链接就是一个普通文件,有自己独立的inode,类似于一个桌面上的快捷方式。保存的是指向所链接文件的路径。硬链接的建立硬链接拥有与链接文件相同的inode,没有自己独立... 查看详情

动静态链接库(代码片段)

文章目录动静态链接库一、什么是库二、静态库1、静态库的优缺点2、静态库的打包3、静态库的使用三、动态库1、动态库的优缺点1、动态库的打包2、动态库的使用四、库的意义动静态链接库一、什么是库将多个目标文件(.o)打... 查看详情

linux动态库与静态库(代码片段)

动态库与静态库文件系统补完文件的三个时间acm动态库与静态库动态链接与静态链接静态库与动态库动静态库的对比生成静态库打包静态库使用静态库生成动态库打包动态库使用动态库文件系统补完文件的三个时间acm我们通过sta... 查看详情

linux缓冲区/磁盘inode/动静态库制作(代码片段)

.../删除硬链接2.2硬链接的应用四、文件的三个时间五、动静态库1、静态库的制作1.1静态库的生成1.2将静态库和头文件合并1.3用户如何使用静态库2、动态库的制作2.1动态库的生成2.2将动态库和头文件合并2.3用户如何使用动态库2.4动... 查看详情