各位大佬好 ,这里是阿川的博客 , 祝您变得更强
个人主页:在线OJ的阿川
大佬的支持和鼓励,将是我成长路上最大的动力
阿川水平有限,如有错误,欢迎大佬指正
上篇博文
Linux权限
Linux生态与工具
目录
- 超级权限
- 编译器
- 引入背景
- 概括
- 发行版本
- 自动化构建工具
- 拓展学习
超级权限
在Linux当中有些权限****需要root账户,但普通用户可以短暂的使用root账户所拥有的权限,需要使用sudo指令
- 使用sudo指令,需要将该用户添加至信任白名单中
- 信任白名单
编译器
编译器——gcc/g++使用
gcc主要编译点c文件
g++ 可以编译点c文件,也可以编译点cpp文件,但 建议cpp
- 经过编译器处理之后,会生成可执行程序
引入背景
1.预处理
- 去注释
- 头文件展开
- 宏替换
注意:预处理阶段能进行头文件展开
则说明****头文件中的代码已经拷贝在了操作系统中
其实无论Visual Studio Installer、Linux、Windows等等这些平台
之所以能够运行编译型语言,是因为在安装该编译型语言时,就已经安装了相应的开发包,开发包中有所对应的头文件和库文件。
头文件(.h)提供方法的声明,库文件****提供方法的实现,加自己写的代码就等于自己的软件.
库其实就是把源文件(.c)经过一定的翻译,然后打包,只给你提供一个文件即可,不用给你提供太多的源文件,可以达到隐藏源文件的目的.
库分为两种类型
动态库
- 在执行代码的过程中,若遇见无法执行的,则跳转到库中执行,执行完之后,回到****自己的代码中向下继续执行,所有访问者都能调用该库,故动态库又称****共享库。
静态库:
- 执行代码前,先将****库中的文件拷贝到本地可执行程序中,不存在说执行代码中遇见无法执行的去跳转到库中去寻找。该库称为静态库。 - 静态库需要先安装:
动态库和静态库区别:
- 动态库因为是共享库,有效的节省资源,但动态库一旦缺失,导致各个程序都无法运行静态库不依赖库,程序可以独立运行,但体积大比较消耗资源- 条件编译- 根据不同的编译条件,裁剪代码- 拓展
2.编译
- 生成可重定位目标二进制文件,简称目标文件
3.汇编
- 生成机器可识别代码- 生成可执行二进制程序
可执行程序形成的时候,不是无序的二进制构成,而有自己的格式–ELF格式
4.链接
- 将可重定位目标二进制文件和标准库链接形成可执行程序 - 点o文件和库如何连接1. 动态链接 与动态库进行连接(默认)2. 静态链接 将静态库的文件拷贝到本地,进行连接3. 实际中****静态和动态链接是混合的。
- 查看链接方式
概括
发行版本
可执行程序发行版本
- debug- 可以被追踪调试- 其中添加了的debug信息
- release(默认)- 不可被追踪调试
自动化构建工具
自动化构建和清理
- make****自动化的指令
- makefile or Makefile****当前目录下的文件- 需要先创建一个makefile文件,在makefile文件中添加一些指令,从而用****make指令进行自动化构建和清理- 之后就可以在控制台中输入make自动化指令了
修改Tab键的默认设置
代码
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
拓展学习
若对自己要求高点,想要进行拓展学习,这里推荐两本书
程序员的自我修养
- 关于编译的深入讲解
深入理解计算机系统
- 不太建议新手小白去看 好的,到此为止啦,祝您变得更强
道阻且长 行则将至
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力
版权归原作者 在线OJ的阿川 所有, 如有侵权,请联系我们删除。