当前位置:网站首页 > 编程语言 > 正文

动态库和静态库的区别(静态库与动态库的区别与优缺点)



1.库是什么?

  库是写好的,现有的,成熟的,可以复用的代码。本质上来说,库是一种可执行代码的形式,可以被操作系统载入内存执行。即为源代码的二进制文件

2.库的类型

  1)在Windows中,.dll后缀为动态库,.lib后缀为静态库。

  2)在Linux中,.so后缀为动态库,.a则为静态库

3.动态库与静态库的优缺点

  1)静态库:

    在程序执行前(编译)就加入到目标程序中

    优点:

    ①静态库被打包到应用程序中,加载,运行速度快

    ②发布程序无需提供静态库,因为已经在app中,移植方便

    缺点:

    ①大,相同的库文件可能在内存中被加载多份,消耗系统资源,浪费内存

    ②库文件更新需要重新编译项目文件,生成可执行程序,浪费时间

  2)动态库:

    在程序执行时动态(临时)由目标程序去调用

    优点:

    ①程序更轻量,

    ②可实现不同进程间的资源共享

    ③动态库升级简单,只需要替换库文件,无需重新编译应用程序

    ④可以控制何时加载动态库,不调用库函数动态库不会被加载

    缺点:

    ①程序运行,加载速度相比用静态库慢

    ②发布程序需要提供依赖的动态库

4.静态库的制作与使用

  1)静态库制作:

    ① gcc xxxxxx.c -c 生成 xxxxxx.o文件

    ②ar rcs libxxxxxx.a xxxxxx.o 由xxxxxx.o文件生成libxxxxxx.a静态库

  2) 静态库使用:

    ① gcc 主程序.c -lxxxxxx -L https://www.cnblogs.com/hetaoBlog/p/ -o xxxx 编译程序后,库就加载到程序中了。在执行此xxx程序的时候,不需要接库(可对比下面调用了动态库的程序运行方式)

      -lxxxxxx -l是指定要用的静态库,库名砍头去尾, -L是告诉gcc 编译器从-L指定的路径去找静态库。默认是从/usr/lib /usr/local/lib  去找

      -o xxx 将编译出来的程序命名为xxx

5.动态库的制作与使用

  1)动态库制作:

    ① gcc -shared -fpic xxxxxx.c -o libxxxx.so 直接用此指令以xxxxxx.c 生成llibxxx.so的动态库

      -shared 指定生成动态库 -fpic 此选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码

  2)动态库使用:

    ①(编译) gcc 主程序.c -lxxxx -L https://www.cnblogs.com/hetaoBlog/p/ -o xxx  -l是指定要用的动态库,库名砍头去尾, -L是告诉gcc 编译器从-L指定的路径去找静态库。默认是从/usr/lib /usr/local/lib 去找

    ②(运行)直接https://www.cnblogs.com/hetaoBlog/p/xxx运行发现报错,解决方式:

   ⑴ sudo cp libxxxx.so /usr/lib/ 将库复制到/usr/lib/再运行即可,因为程序默认回到此文件夹下找库

      ⑵ export LD_LIBRARY_PATH="动态库所在的文件夹的绝对路径" 再运行程序 设置环境变量 (常用)但此环境变量是临时的换个ssh的窗口就不行了。所以往往会写一个shell脚本

        脚本内容为这句话,加主程序。

      例如xxx.sh:

到此这篇动态库和静态库的区别(静态库与动态库的区别与优缺点)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ewm是什么的缩写(ewm是什么的缩写物理)2025-01-24 08:18:09
  • 国内打不开github解决办法(打开不了github)2025-01-24 08:18:09
  • vs怎么调试单个文件(vs2010怎么调试每一步)2025-01-24 08:18:09
  • 鼠标拆包是什么意思(鼠标拆包是什么意思呀)2025-01-24 08:18:09
  • 在线ip反查域名(ip反查域名在线工具)2025-01-24 08:18:09
  • ad20怎么设置捕捉栅格(ad19设置捕捉栅格)2025-01-24 08:18:09
  • 文件权限775什么意思(文件权限765)2025-01-24 08:18:09
  • 程序员必备书籍经典(程序员必读书籍)2025-01-24 08:18:09
  • 圈一(圈一圈,填一填)2025-01-24 08:18:09
  • 目录下打开命令行(在目录打开命令窗口)2025-01-24 08:18:09
  • 全屏图片