linux系统应用学习(三)--- 动态库静态库

动态库静态库

库文件:一般指第三方提供的可调用的库函数文件,库文件封存的是函数体,即.c文件里面的内容。

动态库      静态库

Windows下:        xx.dll              xx.lib

Linux 下:             xx.so              xx.a

静态库和动态库都是已经编译好的目标文件

静态库:在应用程序编译链接的时候,用到库函数的地方,会从静态库把函数体(二进制文件)拷贝到应用程序的调用处,运行时和静态库没关系。

动态库:在运行程序编译链接时,在调用库函数的地方做标记,在程序运行时会动态的去调用动态库中的函数体。

一、创建静态库

1.准备库函数源文件xxx.c   yyy.c  xxx.h

2.把源文件编译成目标文件 gcc -c  xxx.c  -o  xxx.o

                                        gcc -c  yyy.c  -o  yyy.o

3.生成静态库文件

ar  -r  libxxx.a   xxx.o  yyy.o

4.使用静态库

5.编写应用程序源文件

zzz.c 

6.编译应用程序

如果直接加在系统路径下(/lib),-L这个从参数就不用加了。

gcc  zzz.c  -lxxx    -L./  -o  zzz

-l  //指定用到的库文件

-L  //指定库文件存放的路径

7.运行

./zzz

二、动态库

1.创建动态库

  1. 编写库的源文件  xxx.c   yyy.c
  2. 编译成目标文件  gcc  -c  xxx.c  -fpic  -o  xxx.o  |  gcc  -c  yyy.c  -fpic  -o  yyy.o
  3. 生成动态库     gcc  -shared    xxx.o  yyy.o   -o  libxx.so

2.使用动态库

  1. 编写应用程序 main.c
  2. 编译应用程序 gcc  main.c  -lxx   -L./  -o  main
  3. 运行

方式一:

LIBRARY_PATH   //记录编译时动态或静态库的系统路径

LD_LIBRARY_PATH   //记录程序运行时动态库路径

export  LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH

方式二:

把动态库复制到/usr/lib 中

把头文件复制到/usr/include中

三、各自优缺点

优缺点:静态库相比动态库代码量大,但是它容易部署。

动态库则相反,但动态库还容易维护和升级。

猜你喜欢

转载自blog.csdn.net/qq_38639426/article/details/89045159