美文网首页
15.2.1.1静态库与动态库原理,编译流程详解

15.2.1.1静态库与动态库原理,编译流程详解

作者: saygoodbye_e92e | 来源:发表于2019-07-14 13:32 被阅读0次

1.编译原理

15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解

2.下面我们去linux系统去练习编译的4个流程

演示如下:

当前目录创建一个c文件,并且查看内容

15.2.1.1静态库与动态库原理,编译流程详解

预处理

并且通过ls命令查看当前文件目录,发现生成i文件

15.2.1.1静态库与动态库原理,编译流程详解

编译

生成s文件也就是汇编文件

15.2.1.1静态库与动态库原理,编译流程详解

汇编

生成目标文件,也就是o文件

15.2.1.1静态库与动态库原理,编译流程详解

链接

生成可执行文件test

15.2.1.1静态库与动态库原理,编译流程详解

执行这个文件

15.2.1.1静态库与动态库原理,编译流程详解

发现成功执行了我们的代码

事实上我们也可以通过gcc命令直接讲.c文件直接生成可执行文件

首先我们先讲生成的目标文件删除

15.2.1.1静态库与动态库原理,编译流程详解

然后直接将c文件直接生成可执行文件

15.2.1.1静态库与动态库原理,编译流程详解

发现,同样可以生成可执行文件test

15.2.1.1静态库与动态库原理,编译流程详解

执行

15.2.1.1静态库与动态库原理,编译流程详解

同样,我们的源代码被执行了

3.静态库

15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解

4.动态库

15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解

5.接下来我们去lunix系统中操作一下如何编译和生成静态库和动态库

(1)静态库

首先在当前目录创建3个文件如下

15.2.1.1静态库与动态库原理,编译流程详解

分别查看3个文件的内容

15.2.1.1静态库与动态库原理,编译流程详解

将tool.c生成目标文件

15.2.1.1静态库与动态库原理,编译流程详解

生成目标文件gcc命令如果省略-o tool.o,默认生成一个和tool同名的o文件

15.2.1.1静态库与动态库原理,编译流程详解

由tool.o文件生成静态库文件

15.2.1.1静态库与动态库原理,编译流程详解

发现生成了一个libtool.a的文件

接下来,需要编译可执行文件,链接静态库

15.2.1.1静态库与动态库原理,编译流程详解

执行main

15.2.1.1静态库与动态库原理,编译流程详解

使用ls lh来查看详情

15.2.1.1静态库与动态库原理,编译流程详解

可以发现libtool.a只有1.5k而main却有8.4k

为什么会多出来这么多呢

可以使用ldd main来查看可执行文件依赖了哪些库

15.2.1.1静态库与动态库原理,编译流程详解

以上就是如何标准静态库和使用静态库的过程

(2)动态库

同上先将tool.c编译成目标文件tool.o

前面我们已经生成了,这里我们就不在生成了

接下来将.o文件生成动态库

15.2.1.1静态库与动态库原理,编译流程详解

接下来我们来编译可执行文件,和链接到动态库

15.2.1.1静态库与动态库原理,编译流程详解

这里和前面静态库一样

那么问题来了,静态库和动态库同名怎么办?

答:当静态库和动态库同名的时候,gcc会优先加载动态库

15.2.1.1静态库与动态库原理,编译流程详解

执行main发现报错了

执行ldd main

15.2.1.1静态库与动态库原理,编译流程详解

执行之前需要设置环境变量

该环境变量主要用于查找共享库

也就是动态链接库时,除了默认路径以外的其他路径

我们的动态so库没有在默认路径,而是在当前路径一下,所以出现库找不到,所以我们需要设置环境变量

15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解 15.2.1.1静态库与动态库原理,编译流程详解

相关文章

  • 15.2.1.1静态库与动态库原理,编译流程详解

    1.编译原理 2.下面我们去linux系统去练习编译的4个流程 演示如下: 当前目录创建一个c文件,并且查看内容 ...

  • iOS静态库及动态库

    2018-06-19 浅析静态库链接原理编译原理以及什么是静态库和动态库 转之: iOS 静态库和动态库(库详解)...

  • 编译原理以及什么是静态库和动态库

    为什么本人将编译原理和静态库,动态库放在一起讲.因为只有理解了编译的原理,才能真正明白什么是静态库和动态库. 1....

  • 静态库与动态库区别

    本文动态库、静态库区别部分转载自C++静态库与动态库 程序的编译过程如上图 静态库: 之所以成为【静态库】,是因为...

  • 静态库

    静态库 静态库动态库简介 .a 静态库:被编译好的二进制文件 静态库:.a, .framework 动态库: .d...

  • 编译流程、动态库与静态库

    1、编译流程 编译分为四大过程: 预处理 编译 汇编 连接 预处理: 完成宏替换、文件引入,以及去除空行、注释等,...

  • iOS开发进阶四:静态库

    静态库原理 .a:静态库.framework:既有静态库也有动态库.dylib:传统意义上的动态库.xcframe...

  • 编译流程、静态库、动态库

    mac系统提前准备好test.c文件,内容如下 include int main(){print...

  • 静态库、动态库编译原理

    编译过程 预处理 -> 编译 -> 汇编 -> 链接 预处理 完成宏替换、文件引入,去除空行、注释等。 针对预处理...

  • iOS-静态库&动态库-Embed&Sign

    1、静态库&动态库 1.1 库介绍 程序的run流程:编译->链接->生成可执行文件->运行(加载可执行文件&动态...

网友评论

      本文标题:15.2.1.1静态库与动态库原理,编译流程详解

      本文链接:https://www.haomeiwen.com/subject/bxbbkctx.html