波奇学Linux:动静态库

创建静态库

Makefile文件

mymath.c文件

 

mymath.h文件

编译main.c文件

gcc 编译时会把在系统目录中寻找头文件和库文件,文件不在系统目录中用参数

-I 头文件所在文件夹/ -L 库的地址文件夹 -l+除去lib和后缀。

拷贝文件到系统目录即可不用参数

库的安装类似于把头文件和库文件拷贝到系统文件中

库可以提供一个全局变量,如errno就是C语言提供的

如果系统默认动态链接,只提供静态链接,gcc只能提供静态链接。

动态库

动态库在程序运行时被加载到内存,所以产生库的方式和产生可执行程序的命令类似

同时连接动静库

可执行程序链接动态库,必须让加载器和gcc编辑器同时知道位置,方法如下

方法一:把动态库拷贝到系统目录/lib64/usr/lib64

方法二:在系统目录创建软链接指向动态库

方法三:环境变量$LD_LIBRARY_PATH系统搜索动态库路径,将路径添加到这个变量里

方法四:/etc/ld.so.conf.d建立自己的路径动态库路径配置文件,然后重新ldconfig即可。

动静态库区别

静态库相当于把代码拷贝到可执行程序中,当可执行程序链接后,删掉静态库依然可以运行。

动态库相当于程序运行时跳出来运行动态库的代码,动态库删除后,程序不能运行。

动态库在系统中加载之后,会被所有的程序共享,在内存中只会被加载一份。

动态库加载

一份动态库加载到内存中通过页表映射加载到多个进程地址空间的共享区,正文代码运行到库的时候进入共享区。

执行的代码都是在进程地址空间进行执行。

系统在运行时,一定会存在多个动态库,通过os管理起来

动态库的数据会发生写时拷贝,如全局变量。

可执行程序编译完后没有加载到自己内存中有自己的地址。程序可以分区并有地址

平坦模式0~4GB,上面的地址并不是真实的物理地址,是逻辑地址

相关推荐

  1. Linux静态

    2024-02-19 12:32:04       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 12:32:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 12:32:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 12:32:04       87 阅读
  4. Python语言-面向对象

    2024-02-19 12:32:04       96 阅读

热门阅读

  1. STM32 USART入门指南

    2024-02-19 12:32:04       53 阅读
  2. 服务端和客户端以及前后端相关概念区分

    2024-02-19 12:32:04       50 阅读
  3. git----->git pull和git fetch区别

    2024-02-19 12:32:04       52 阅读
  4. Mybatis

    Mybatis

    2024-02-19 12:32:04      47 阅读
  5. 前端给后端传值

    2024-02-19 12:32:04       52 阅读
  6. RSA后端加密,解密,加签及验签

    2024-02-19 12:32:04       53 阅读
  7. ES的使用场景深入详解

    2024-02-19 12:32:04       51 阅读
  8. elasticsearch常用命令

    2024-02-19 12:32:04       47 阅读
  9. 【国产MCU】-CH32V307-通用定时器(GPTM)-PWM输出

    2024-02-19 12:32:04       59 阅读
  10. 消息中间件-RocketMQ

    2024-02-19 12:32:04       42 阅读