当前位置: 首页 > article >正文

Linux工具使用

1.gcc/g++的使用

1.1程序翻译的过程

①预处理:展开头文件,替换宏,调节编译,去注释。

②编译:将代码变成汇编语言

③汇编:将汇编代码变成二进制不可执行的目标文件。

④链接:将多个我写的多个.cpp文件内容链接在一起,并与C++标准库链接起来。

分别生成的是-i ,-s ,-o文件,选项依次是-E  -S  -c;

演示预处理->编译->汇编->链接过程

 2.动态库和静态库

2.1动态链接和静态链接

编译链接时与动态库链接就称为动态链接,与静态库的链接称为静态链接。

静态链接:编译链接时将静态库的代码全部放进可执行文件中。

动态链接:编译链接时不将动态库的代码放进可执行文件中,而是在程序执行需要时,再通过链接器链接到动态库中。

区别:

动态链接时,形成的可执行程序小,节省资源:内存,磁盘,网络,但是链接需要耗时。

静态链接时,形成的可执行程序大,浪费资源,但是不受之后库升级或者删除的影响。

2.2动态库和静态库

在linux下动态库都是以libxxx.so命名的,静态库是libxxx.a命名的。

我们可以用指令file 可执行程序名  来查看程序是动态链接还是静态链接。用lld 可执行程序名 查看程序的动态库或者静态库地址。

由此也可看成,我们生成的程序都是默认的动态链接,但是我们可以在链接时加上-static修饰,就能生成静态链接的可执行程序。值得注意的是,动态链接是库中自带的(因为Linux指令也是可执行程序,也是采用的动态链接),但是静态库一般要我们下载,他们库不是相同的。

yum install -y glibc-static  C语言的静态库

yum install -y libstdc++ -static C++的静态库

yum install -y gcc-c++ C++的动态库

 相同为我们提供了标准库的.h声明文件---告诉了我们该如何使用接口。

还提供了标准的动静态库。我们的代码 + 标准库的代码  = 程序

在Windows环境下的原理也是类似的,其动态库是以.dll后缀,静态库是.lib后缀

3.Linux项目自动构件化工具makefile---make

makefile是一个文件,make是一条命令,两个搭配使用完成项目的自动化构建

3.1 makefile

makefile中需要有两个部分组成:依赖关系和依赖方法。

其中文件有三个时间分别是access,modify,change时间 ,用stat指令可查看。touch可修改到当前时间

被.PHONY修饰的指令,不会受时间的影响而不执行,它总是执行。 

3.2倒计时程序

  1 #include <stdio.h>
  2 #include <unistd.h>
  3 int main(){
  4   int n = 20;
  5   while(n--){
  6     printf("%2d\r",n);// \r为回车操作 \n为换行+回车操作 
  7     fflush(stdout);//将缓存区的数据输出到stdout
  8     sleep(2);//休息2s                                                                                                                                                                                        
  9   }
 10   return 0;                              
 11 }            

值得注意的是即使printf先执行,但数据不一定先显示,有可能在缓冲区中。我们需要手动刷新缓冲区数据到stdout中。当缓存区遇到\n或者满时也会自动刷新。


http://www.kler.cn/a/526656.html

相关文章:

  • 360嵌入式开发面试题及参考答案
  • 爬虫基础(五)爬虫基本原理
  • android 圆形弹窗摄像头开发踩坑——源码————未来之窗跨平台操作
  • 【NLP251】意图识别 与 Seq2Seq
  • Java---入门基础篇(上)
  • Excel 技巧21 - Excel中整理美化数据实例,Ctrl+T 超级表格(★★★)
  • Golang 并发机制-2:Golang Goroutine 和竞争条件
  • 【RocketMQ 存储】- broker 端存储单条消息的逻辑
  • 算法随笔_31:移动零
  • DeepSeek-R1 模型及GRPO算法学习
  • 浅谈网络 | 容器网络之Flannel
  • 21.3-启动流程、编码风格(了解) 第21章-FreeRTOS项目实战--基础知识之新建任务、启动流程、编码风格、系统配置 文件组成和编码风格(了解)
  • 雅思写作(支持句)
  • 告别重启!Vue CLI 动态代理配置实战:实现热更新与灵活配置
  • Redis实战(黑马点评)——redis存储地理信息、位图、HyperLogLog 用法
  • 【视频+图文详解】HTML基础1-html和css介绍、上网原理
  • 从零开始学习电池SOC算法
  • MySQL知识点总结(十五)
  • Deep Seek R1本地化部署
  • 如何解决Unit sshd.service could not be found
  • Vue.js组件开发-实现全屏背景图片滑动切换特效
  • 自动备案批量查询脚本
  • 系统思考—蝴蝶效应
  • AngularJS 模块
  • 【电工基础】低压电器元件,低压断路器(空开QF),接触器(KM)
  • Python NumPy(8):NumPy 位运算、NumPy 字符串函数