静态库与动态库

首先简单介绍一下gcc 指令

ubuntu 下安装gcc g++ 方法

gcc 的简单使用

编译步骤

  1. 预处理 生成.i 文件
  2. 编译 生成.s 文件
  3. 生成目标文件 .o
  4. 链接各个.o 文件生成可执行文件

gcc常用参数选项

静态库

  • Linux 静态库
    • libxxx.a
      • lib 前缀
      • xxx 库的名字
      • .a 后缀
  • Windows 静态库
    • libxxx.lib

静态库的制作

  1. 生成 .o 文件
  2. 使用ar 打包
    1. ar rcs
    2. -r 替换
    3. -c 创建
    4. -s 索引

静态库的使用

  • -L 静态库路径
  • -l 静态库名字 为libxxx.a 中的xxx

动态库/共享库

  • Linux 动态库
    • libxxx.so
      • lib 前缀
      • xxx 库的名字
      • .so 后缀
  • Windows 动态库
    • libxxx.dll

动态库制作

  1. 生成 .o 文件 (与位置无关)
  2. gcc -shared xxx.o xxx.o xxx.o -o libcxxx.so

动态库使用

工作原理

  • 静态库在程序编译时会链接到目标代码中,程序运行时不再需要静态库,体积较大。每次编译都需要载入静态代码,内存开销大。
  • 动态库在程序运行时才被载入,程序运行时需要动态库存在,体积较小。系统只需载入一次动态库,不同程序可以得到内存中相同的动态副本,内存开销小。

解决动态库找不到的问题:

第一种: 将动态库的绝对路径添加到 LD_LIBRARY_PATH 中

  1. 测试时候使用的, 终端关闭, 设置失效:
    在当前终端中执行: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/库的路径
  2. 长久设置, 将export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/库的路径 写到配置文件中
  • 用户: ~/.bashrc
  • 系统: /etc/profile
  • 添加完成执行命令, 使修改生效:

第二种: 在 /etc/ld.so.cache 添加动态库路径

  1. 打开文件: /etc/ld.so.conf
  2. 将.so文件路径的目录添加到/etc/ld.so.conf, 更新: sudo ldconfig
  3. /etc/ld.so.conf的作用:记录了程序加载运行期间查找动态链接库时的路径。

静态库与动态库的区别

静态库特点总结:

动态态库特点总结:

04-16 06:00