目录
一、静态库&动态库
1.1什么是库:
静态库和动态库都是程序代码的集合。一 般为了方便将程序提供给第三方使用,就是将程序编写成为库文件提供给第三方(用户)使用,那为什么将程序编写成库文件就不会泄漏源码了呢。这是因为将程序编写成库文件就会变成二进制的形式,而二进制的形式十分难破解
- 好处:
- 不会泄漏公司的源码(公 司赖以生存的秘密)调用者不必关系内部实现,只需要关注如何使用 (如何调用)即可

-
对于这个软件:1、需要四各动态库,这四个动态库是独立编译的
- 2、编译软件的时候需要链接四个动态库
- 方便维护

- 2、编译软件的时候需要链接四个动态库
那么在维护的时候,就是哪个动态库有问题就维护哪个就行了
二、动态库
-
2.1特征:
- win:没有前缀,后缀为 dll
- linux:前缀为lib,后缀为 .so
2.2生成:
- 使用gcc/g++编译器,增加两个命令行参数
- -fPIC //产生与位置无关的代码
- - shared //产生共享库
- 生成动态库的代码当中不需要包含main函数(程序入口函数)
实现思路:

下面我们来进行代码实现:
先写一个头文件 (提供给使用者的)

再来写一个源文件 (产生动态库所使用的源文件)

在输入命令 gcc -fPIC -shared hello.c -o libhello.so 可以发现成功生成了动态库文件


使用ldd mymain去查看

也确实能看到mymain这个可执行程序依赖动态库libhello。so
使用:
- 编译可执行程序的时候,依赖动态库
- L [path] :指定动态库所在的路径
- -l [动态库的名称(去掉前缀和后缀之后的名称) ] :指定编译可执行程序时, 依赖的动态库是那个。
我们之前是把动态库移到了当前目录下去进行链接的,
现在我们如果把动态库移动到上级目录的话会怎样呢?

这时候能够发现,现在程序找不到动态库了,那么有时候方法能让程序去找到动态库呢?
都有哪些方式让程序可以找到动态库:
- 1.将动态库放到可执行程序的路径下(不推荐)
刚刚我们实现可执行程序mymain的操作就是将动态库放到了执行程序的路径之下
- 2.配置LD_ L IBRARY PATH,动态库的环境变量: LD _LIBRARY_ _PATH
下面我们来实现一下这个方法
先找到动态库的路径

在把这个路径给添加过去

我们再来看一下能不能找到

我们可以看到,成功找到了动态库
三、静态库
-
3.1特征:
- win:没有前缀,后缀为。 lib
- linux :前缀为lib, 后缀为,a
3.2生成:
- 第一阶段:使用gcc/g++将 源代码编译成为目标程序(.o)
我们先写一个头文件hello.h

再写一个源文件hello.c

再把源文件编译为.o文件

- 第二阶段:使用ar -rc命令编译日标程序成为静态库

接下来调用静态库去运行下代码

我们会发现编译成功并且能够运行

我们这时候再来看静态库的的依赖性关系

并没有找到对libhello.a的依赖关系
这是因为静态库有特性
在执行可执行程序的时候,静态库会编译到可执行程序内,不存在可执行程序对静态库的依赖关系
本文解析了静态库和动态库的概念及生成方法。动态库在Windows环境下后缀为.dll,在Linux环境下前缀为lib,后缀为.so;静态库在Windows环境下后缀为.lib,在Linux环境下前缀为lib,后缀为.a。文章还详细介绍了动态库和静态库的生成步骤及使用方法。
1471

被折叠的 条评论
为什么被折叠?



