linux下静态库以及动态库的使用过程

在linux下经常会将一些.o文件打包成一个库,分为静态库和动态库。

静态库主要是任何一个程序需要这个库, 就会将这个静态库的内容拷贝一份到程序中,进行执行。

但是这样会出现一个问题, 当很多程序都要用这一个库的时候, 这个库就会被拷贝多份,然后造成代码冗余,占用内存空间, 这时就出现了动态库, 动态库只在系统中保存一份,哪一个程序使用它就去拿一份,不进行拷贝,这样大大节省了内存空间消耗。

举一个例子进行说明:

首先先编写四个.c 和四个.h文件,分别是add.c  sub.c  mul.c div.c 和 add.h   sub.h   mul.h  div.h。进行测试:

  1 #include "add.h"
  2 
  3 int add(int a, int b)
  4 {
  5     return a+b;
  6 }
   
  3 #ifndef __ADD_H__
  4 #define __ADD_H__
  5 
  6 int add(int a,int b);
  7 
  8 
  9 #endif //__ADD_H__

其他三个文件和add文件类似。

1,首先创建静态库:


通过命令:

ar -rc libmyku.a add.o sub.o mul.o div.o  创建静态库, 静态库库名为myku,静态库文件名为:libmhyku

通过错名:

ar -tv libmyku  可以查看静态库myku的内容

然后进行使用,如下图:


2,创建动态库以及使用

通过 gcc -fPIC -c sub.c add.c mul.c div.c 和 gcc -shared -o libmuky.so *.o

两句命令,创建了一个libmyku.so的动态库

使用动态库有两种方式:

(1)将动态库拷贝到/usr/lib目录下, 编译时直接 gcc main.c -lmyku即可

结果如图所示:

(2)将环境变量修改, export LD_LIBRARY_PATH = .

将当前目录添加到环境变量LD_LIBRARY_PATH中,再修改配置文件 /etc/ld.so.conf.d/XX.conf即可


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页