news 2026/7/12 9:58:43

Linux操作系统 --- 开发工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux操作系统 --- 开发工具
一、Linux编译器--gcc/g++

程序翻译过程:预处理 .i -> 编译 .s -> 汇编 .o -> 链接 -> .out/可执行文件

1. -E:告诉gcc,进行程序翻译、预处理结束就行

头文件展开 宏替换 条件编译

-E 源文件名 -o 文件(后缀名为.i)

2. gcc file_name1 -o file_name2

(-o)-- 可重命名(用途:直接形成可执行文件)

3. -S:将 -E 后的预处理文件翻译为汇编文件,编译处理结束就行

-S(源文件)-o 文件(后缀名为.s)

4.-c:将 -E 后的汇编文件翻译为机器码(可重定位目标二进制文件)

-c:源文件

-o:可垂直定位目标二进制文件(后缀名为.o)(简称目标文件)(不可以独立执行,需要链接才可以执行)

*链接:库 -- 提供方法的实现 -- 将源文件.c进行一定的翻译,打包

头文件 -- 提供方法的说明

c语言标准库 -- 本质为一个有路径的文件 -- Linux(.so -- 动态库 .a -- 静态库) Windows(.dll -- 动态库 .lib -- 静态库)

5. .o(目标文件)如何与库进行链接?(动态链接 静态链接)

(1)在linux中,编译形成可执行程序,默认采用的就是动态链接--提供动态库

在linux中,如果要按照静态链接的方式,进行形成可执行程序,需要添加static

动态链接 -- 程序编译链接阶段,不拷贝库代码,仅记录库函数符号与依赖信息。程序运行阶段,由系统动态链接器加载动态库(.so),进行地址重定位、完成函数符号绑定与链接。多个程序可以共享同一份动态库(核心:库代码独立存放,运行时绑定)

静态链接 -- 程序编译链接阶段,链接器将程序调用的库函数,从静态库(.a)中提取目标代码,直接拷贝合并到最终可执行文件中。程序运行时不再依赖任何外部库,完全独立运行(核心:可代码打包进程序,链接时绑定)

(2)动态库 静态库

定义

优点

缺点

动态库

.so

库代码独立存放

编译时仅记录符号与依赖,运行时由动态链接器加载库文件,再完成链接重定位

为共享库,有效节省资源(磁盘空间等)

一旦缺失,各个相关程序不工作

静态库

.a

目标文件(.o)的集合

编译链接时,链接器会将程序用到的库代码直接复制拷贝到可执行文件中

不依赖库,程序可独立运行

体积大,消耗资源

若无静态库,但就要-static(进行静态链接),是否可行?不可行

若无动态库,只有静态库,gcc可以找到静态库,可以进行静态链接 -- gcc默认优先进行动态链接,-static要求全部静态链接,如果系统没有对应静态库,报错

(3)不一定所有的文件的链接都是单一的动态链接或者静态链接,是混合的:-static 所有链接要求都变成静态链接

(4)debug release

A. -g:以debug的形式发布 优点:可以调试 可以查看源码

B. 原始版本为release 优点:优化 无调试信息

二、make/Makefile

1. make -- 一条指令

Makefile -- 一个当前目录下的文件

目标文件:依赖文件

执行命令

2. 依赖关系 依赖方法

依赖关系:生成这个文件,需要哪些文件为前提(make会自动推导makefile中的依赖关系 -- 有向无环图DAG)

依赖方法:[目标 :依赖] make会自动判断是否需要重新编译

3. 如何清理?怎样做到清理?

clean:依赖关系为空(建议放在后面)

4. 为什么只允许编译一次?

提高效率

make会根据源文件和目标文件的新旧,判断是否需要重新执行依赖关系进行编译(依赖关系不一定总是被执行的)

.PHONY:伪目标文件 -- 表示总是被重新编译

两个文件新旧时间进行比较的依据:时间戳

5. 特殊符号

1)$@ -- 依赖关系冒号左侧内容

2)$^ -- 依赖关系冒号右侧内容

3)@ -- 依赖方法不显示

6. 进度条项目

1)回车换行 \r --- 回到当前行开头 \n --- 光标下一行

2)缓冲区 -- 由语言维护的一段内存

三、Git --- 分布式版本控制系统 client/server一体

1. 安装yum

yum install git

2. 具有网络功能的版本控制器

开源 client和server一体

3. 如何使用

  • 复制在gitee中创建的项目链接
  • 下载项目到本地

4.其他问题

  • git log -- 查看提交记录
  • git init -- 初始化
  • git clone url -- 克隆
  • git status -- 查看提交状态
  • git add 文件 -- 添加
  • git commit -m "message" -- 提交
  • git push -- 上传
  • git pull -- 下载更新
  • .gitgnore -- 文件包含的后缀名,只要预上传的文件中含有就不会被上传(可手动添加)
  • 首次使用需要配置用户名和邮箱
四、Linux调试器--gdb
  1. gcc默认不生成调试信息
  2. 如果以debug方式发布,必须携带 -g
  3. gdb 可执行文件
  • l -- 函数名(可查看函数) l num -- 从num行显示代码
  • r -- 运行程序
  • b num -- 在num行打断点
  • info b -- 查看断点信息
  • d num -- 删除编号为num的断点
  • n -- 逐过程,不进入函数
  • s -- 逐语句,进入函数
  • p name -- 打印变量值
  • display name -- 常显示变量/… undisplay num -- 取消编号为num的变量的常显示
  • until num -- 跳转至指定行
  • finish -- 运行完一个函数
  • c -- 继续运行,直到下一个断点/程序结束
  • disable num -- 关闭编号为num的断点,不删除
  • enable num -- 打开编号为num的断点 open状态
  • set var name = num -- 修改变量名为name的值为num
  • quit/q -- 结束调试
  • bt -- 查看各级函数调用及参数
  • i -- 查看当前栈帧局部变量的值
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 9:58:10

Unity游戏实时汉化实战:XUnity Auto Translator原理、配置与避坑指南

1. 项目概述:为什么我们需要游戏文本自动翻译工具作为一名玩了十几年游戏的老玩家,我深知语言障碍是横亘在无数玩家面前的一座大山。有多少次,你看到Steam上打折的某款独立佳作,或者某个小众但口碑极佳的RPG,却因为游戏…

作者头像 李华
网站建设 2026/7/12 9:58:03

STM32F722VE GPIO上拉下拉配置与DTH-08传感器通信优化

1. 项目背景与硬件选型 在嵌入式系统开发中,信号的上拉和下拉配置是确保电路可靠工作的基础技术。这次我们要实现的是使用DTH-08传感器模块配合STM32F722VE微控制器,通过编程方式动态切换信号线的上拉和下拉状态。 STM32F722VE作为STMicroelectronics出…

作者头像 李华
网站建设 2026/7/12 9:57:33

免费快速解密:3分钟掌握网易云音乐NCM转MP3终极方法

免费快速解密:3分钟掌握网易云音乐NCM转MP3终极方法 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐的NCM加密格式烦恼吗?ncmdump是一款完全免费开源的NCM格式解密转换工具,专门解…

作者头像 李华
网站建设 2026/7/12 9:57:02

《再生侠》4K版技术解析:暗黑美学与超自然动作的视觉革命

这次我们来聊聊《再生侠》这部4K画质神作。这部作品讲述顶尖特工被同僚谋害坠入地狱后,以灵魂换取力量重生,背负残破身躯一边复仇一边阻止生化浩劫的故事。影片最吸引人的地方在于它撕裂了地狱与人间的界限,将超自然元素与硬核动作完美结合。…

作者头像 李华
网站建设 2026/7/12 9:54:46

Unity 2D骨骼动画实战:DragonBones完整导入与性能优化指南

1. 项目概述:为什么Unity 2D游戏开发者需要关注DragonBones?如果你正在用Unity开发2D游戏,尤其是横版动作、RPG或者需要大量角色动画的项目,那么“动画”这个环节大概率是你开发流程中的一个痛点。传统的序列帧动画,每…

作者头像 李华