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静态库与动态库原理,编译流程详解
网友评论