Linux下建立、使用库文件

建立、使用静态库的过程:

  1. 先写一个.h文件和.c文件
  2. 把.c文件用 gcc -o ~.o -c ~.c生成.o文件(目标文件)
  3. 将目标文件加入到静态库(静态库文件通常以.a结尾)中 ar rcs ·~.a  ~.o

注意:生成的.o文件 开头要是lib,形如lib~.o 因为linux约定所有的库文件前缀都是lib

常用参数:

r:在库中插入(修改)模块(替换静态库)。当插入的模块名已经在库中存在,则替换同名的模块,如若干模块中有一个模块在库中不存在,则ar显示一个错误信息,并且不会替换其他同名模块

c:创建一个新的库。不管库是否存在,都将创建

s:创建目标文件索引,此参数在创建较大库时能加快时间。如果不需要创建索引,可改写成S参数;如果.a文件缺少索引,可以使用ranlib命令来添加索引

4.将静态库拷贝到linux的库目录下(/usr/lib或/lib)             (可以不拷贝,但是需要在编译时指定库目录)

5.编译调用静态库的~.c生成可执行文件gcc -o ~(可执行文件名) ~.c(调用库的.c文件) -l(库的名字) -L(L后面指定库文件的目录,跟.是指定当前目录)

例如:gcc -o main main.c -lmylib -L.

 

建立、使用动态库的过程:

  1. 使用gcc的-fpic(fPIC也行)命令生成使用相对地址的位置无关的目标代码。 gcc -fpic -shared -o ~.o -c ~.c(用来生成动态库的.c文件)
  2. 通过gcc命令调用 gcc -o ~(可执行文件名) ~.c(调用动态库的.c文件) /~动态库的路径+文件名(当前路径只需要./动态库名.so)

例如:gcc -o main main.c ./libmylib.so

 

两者的区别:

动态库只有当使用它的程序执行时,才被链接使用,而不是将需要的部分直接编译入可执行文件中,并且一个动态库可以被多个程序使用,所以叫共享库。

静态库将会整合到程序中,因此在程序执行是不用加载静态库。

 

由此可知,链接到静态库会使程序臃肿且难以升级,但好处就是会容易部署。

动态库的好处是程序轻便且易于升级,缺点是难以部署。

posted @ 2020-10-05 15:22  SjYu  阅读(420)  评论(0编辑  收藏  举报