用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
运维.售后
›
运维.售后
›
【Linux】具体介绍自动化构建工具make/makefile以及动态 ...
【Linux】具体介绍自动化构建工具make/makefile以及动态库的明白 ...
一给
论坛元老
|
2024-11-18 07:48:55
|
显示全部楼层
|
阅读模式
楼主
主题
1846
|
帖子
1846
|
积分
5538
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
目录
一、链接阶段的动态库的明白
(一)、基本概念
(二)、动态链接方式访问动态库的过程
(三)、静态链接
(四)、动态库和静态库优缺点
(五)、使用静态链接生成可执行文件:-static选项
使用ldd指令检察文件所链接的库
二、Linux项目自动化构建工具-make/Makefile
(一)、快速认识使用
1、介绍:
2、使用
(二)、解释依赖关系和依赖方法
(三)、具体介绍
1、项目的自动化清理
2、make指令使用顺序说明:
3、更改源文件也可以继续执行make
4、认识文件的三个时间(ACM时间)(stat指令可检察)
5、touch拓展小知识:
6、makefile文件的新语法:伪目的
7、makefile中定义变量和其他小知识
一、链接阶段的动态库的明白
(一)、基本概念
1、动态库文件的后缀名为 .so ,链接动态库的操作就叫动态链接。
2、静态库文件的后缀名为 .a,链接静态库的操作就叫静态链接。
3、动静态库的本质就是文件。
(二)、动态链接方式访问动态库的过程
首先编译器把内存中的相应位置告诉可执行程序,然后可执行程序开始一步一步执行代码,如果执行到某些标准库内里的内容(如库函数),就会去动态库中找到相应函数源码,然跋文录源码的地点(这个过程叫做库调用),记录后又将函数源码地点返回到内存当前代码位置(这个过程叫做函数返回),然后继续运行代码。这个过程就是动态链接访问动态库的过程。
因为动态库是被多个使用者共享使用,一旦缺失(不如误删库大概一些配件的更改),所有程序都不可运行了。如下:
Linux中很多指令都链接了C动态库,若该库丢失了,那么这些指令都不可以用了。
(三)、静态链接
静态链接:在链接的时候,将库中的方法拷贝到本身的可执行程序里,以后程序都不再使用第三方库。(将本身需要的代码拷贝到本身的可执行程序中)。
注意:因为要将库中代码拷贝到本身的程序内里,就会使得本身的程序会占用很大的空间,这就会比较浪费资源(占用磁盘,进入内存后开辟的空间,使用网络下载时的开销)。
(四)、动态库和静态库优缺点
动态库:
(1)、长处:比较节省资源,不会出现太多重复的代码(资源指上面提到的磁盘,内存,网络等资源)。
(2)、缺点:对库的依赖性比较强,一旦库丢失,所有使用这个库的程序都无法运行。
静态库:
(1)、长处:不依赖库,同范例平台中(如centOS不同版本)都可以直接运利用用。
(2)、缺点:可执行程序体积比较大,比较浪费资源(资源指上面提到的磁盘,内存,网络等资源)。
(五)、使用静态链接生成可执行文件:-static选项
gcc默认使用的是动态链接,想要使用静态链接需要加入选项 -static:
如图分别是两个链接所产生的可执行文件,同样的代码,还只是几句C语言代码
文件大小竟然相差6倍左右。
使用ldd指令检察文件所链接的库
如图,检察test.o会提示“不是一个动态文件”,检察test1.o就会显示所依赖的库
二、
Linux
项目自动化构建工具
-make/Makefile
(一)、快速认识使用
1、介绍:
(1)、一个工程中的源文件不计数,其按范例、功能、模块分别放在多少个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 (2)、makefile带来的利益就是——“自动化编译”,一旦写好,只需要一个make下令,整个工程完全自动编译,极大的提高了软件开辟的服从。 (3)、make是一个下令工具,是一个解释makefile中指令的下令工具,一般来说,大多数的IDE都有这个下令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。 (4)、make是一条下令,makefile是一个文件,两个搭配使用,完成项目自动化构建
2、使用
make是一条下令, makefile是一个文件,两者一个是依赖关系,一个是依赖方法。 首先需要在源文件 (.c/.cpp)的目录下,新建一个名为 makefile 或 Makefile 的文件
然后打开该文件,写入两条代码: 第一条:是依赖关系,类似给目的文件起一个名字(你是谁,我为什么要帮你) 第二条:是依赖方法,即告诉他需要进行一个什么操作(怎么帮)
如上,将第一条代码将 mybin这个名字与源文件相依赖,第二条代码进行 gcc -o的操作 设置好后在下令利用用 make 指令,这样就可以进行 gcc -o 操作生成可执行文件,生成的可执行文件名就叫 mybin。
该文件就是可执行文件,可以直接运行。 若将运行的操作也设置在文件内里:
make下令就会生成可执行文件后,并运行该文件:
(二)、解释依赖关系和依赖方法
依赖关系中有两个概念: (1)、目的文件 (2)、依赖文件列表,注意,这里是一个一列表,已空格作为分隔符。
依赖方法有个语法: 需要以tab键开头(不是空格)
(三)、具体介绍
1、项目的自动化清理
我们发现一个征象:
当 makefile文件设置好后,第一次执行 make文件会生成 mybin文件,但第二次再使用 make指令就会报错“ mybin已存在”,因为不大概生成两个同名文件。这时就可以使用自动化清理操作,在 makefile文件中设置自动化清理下令,如下:
再加一个依赖关系: clean,只是该目的文件可以没有依赖文件列表,然后在依赖方法中设置删除目的文件的下令, -f 选项表现强制的意思,这样不管文件存不存在,都会执行删除操作,避免过度询问。 设置好后,使用方法如下:
make反面接上目的文件名,即可执行删除操作,这样就不用手动删除 mybin文件了,可以直接通过 make下令进行删除。 问题来了,为什么第一个依赖关系使用 make指令时,反面不需要加目的文件?解释如下:
2、make指令使用顺序说明:
为了解释上面问题,我们可以观察一个征象:
我们会发现两个征象: (1)、 make和 makefile形成目的文件的时候,默认是从上到下进行扫描 makefile文件的,并且默认形成的是第一个目的文件。 (2)、默认只能形成一个。
3、更改源文件也可以继续执行make
上述是为了办理多次使用 make指令的问题,除了使用项目自动化清理( clean),也可以使用以下方法:更改源文件后也可以继续使用 make指令,如下更改 test.c文件后可以继续使用 make指令:
所以我们可以知道:
问题
: make和 makefile怎么知道可执行程序是比较新的呐(修改过)? 这个是通过对比文件的三个时间(ACM时间)比出来的,只要可执行程序的近来修改时间比所有源文件的近来修改时间新,说明他就是最新的(没有被修改过),反之则被修改过。
举例
:例如vs编译器中的“重新生成办理方案”。
4、认识文件的三个时间(ACM时间)(stat指令可检察)
有了上面问题,如今我们来分析文件的三个时间,也叫 ACM时间: 访问时间、修改时间、改变时间 通过 stat 指令可以检察这三个时间:
(1)、修改时间: Modify 修改时间是受文件内容的影响而变革,如上述的改变 test.c的内容,那么修改时间就会相应变革,所以修改时间的改变是可以继续使用 make指令的。 (2)、改变时间: Change 我们会发现,有时当修改时间变革时,改变时间也会跟着变革,缘故原由是改变时间是受文件的属性的影响,而属性的变革有时会受文件内容的影响,例如当修改文件内容时,文件的大小会发生变革,也就是文件属性发生变革。所以说改变时间的改变,也是可以继续使用 make指令的。 (3)、访问时间: Access access时间不会轻易更新,只有具体深入访问或修改了文件后才会更新,因为访问文件内容的次数是对文件操作中占比最大的,若访问一次文件就更改一次访问时间,操作体系就会频繁访问磁盘文件,对 access时间进行修改,这就加大了体系的负担。
最后得出结论,make指令重要是受修改时间的影响!!!
。
5、touch拓展小知识:
使用 touch指令后,若文件不存在,则创建文件;若文件存在,则刷新文件的 acm时间。
6、makefile文件的新语法:伪目的
上面我们知道, makefile总是默认执行第一个依赖关系,并且只执行一个,那么每次都需要手动 make clean一下黑白常麻烦的,所以接下来就介绍新语法办理该问题:
由上图我们学到两个知识: (1)、 makefile中的注释是 “ #+描述内容 ”; (2)、使用 .PHONY:目的文件名,修饰目的文件 mybin,这样 mybin就成为一个为伪目的,总是可以被执行,这样就不用思量上述的 ACM时间问题,可以一直使用 make,但是通常是将删除操作 clean 设置成伪目的,因为删除操作是必须一直可以执行的。
7、makefile中定义变量和其他小知识
(1)、在 makefile中:“ $ ”代表目的文件,“ ^ ”代表源文件:
(2)、定义变量和使用变量的规则:
8、关于make/makefile的语法推到的明白:类似于栈
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
一给
论坛元老
这个人很懒什么都没写!
楼主热帖
手把手教你如何使用kali破解wifi密码( ...
3.2操作系统(基本分页存储管理的基本 ...
C++面试八股文:std::array如何实现编 ...
嵌入式 Linux 内核驱动开发【The first ...
零基础入门 Java 后端开发,有哪些值得 ...
你真的了解二叉树吗?(上篇) ...
Wireshark学习笔记(一)常用功能案例 ...
Kubernetes(K8S) Deployment 升级和回 ...
上古神兵,先天至宝,Win11平台安装和配 ...
当“超融合”邂逅“奥 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
图数据库
快速回复
返回顶部
返回列表