Linux环境基础开发工具的使用(apt、vim、gcc、g++、gdb、make/Makefile)

embedded/2025/2/26 13:19:41/

Linux环境基础开发工具的使用(apt、vim、gcc、g++、gdb、make/Makefile)

文章目录


linux%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8---apt" rel="nofollow">Linux软件包管理器 - apt

Linux下安装软件的方式

在Linux下安装软件的方法大致有以下三种:

  1. 下载到程序的源代码,自行进行编译,得到可执行程序。
  2. 获取 .deb 安装包,通过 dpkg 命令进行安装(未解决软件的依赖关系)。
  3. 通过 apt 进行安装软件(常用)。

认识apt

apt 是一个在 Debian 和 Ubuntu 系列操作系统中常用的软件包管理器,能够从指定的服务器自动下载 .deb 包并安装,可以自动处理依赖性关系。

# 示例:
sudo apt install lrzsz

注意: 一个服务器同一时刻只允许一个 apt 进行安装,不能在同一时刻同时安装多个软件。

由于 apt 是从服务器上下载 .deb 包,所以在下载时必须联网,可以通过 ping 指令判断当前云服务器是否联网。

# 示例:
ping -c 4 google.com

查找软件包

# 示例:
apt list | grep lrzsz

安装软件

指令: sudo apt install 软件名

# 示例:
sudo apt install lrzsz

apt 会自动找到需要下载的所有软件包,并在确认后进行安装。安装完成时,会显示 “complete”。

如何实现本地机器和云服务器之间的文件互传

安装了 lrzsz 后,可以使用以下命令上传和下载文件:

  • 上传文件

    rz -E
    
  • 下载文件

    sz 文件名
    
# 示例:
sz test.txt

卸载软件

指令: sudo apt remove 软件名

# 示例:
sudo apt remove lrzsz

linux%E7%BC%96%E8%BE%91%E5%99%A8---vim" rel="nofollow">Linux编辑器 - vim

vim_119">vim的基本概念

vim 是一个多模式的文本编辑器,常用于编辑文本和编程代码。在 vim 中,最常用的三种模式是:

  1. 命令模式(Normal mode):用于控制屏幕光标的移动、字符、字或行的删除、复制粘贴等操作。
  2. 插入模式(Insert mode):允许文字输入。
  3. 底行模式(Command mode):用于文件保存、退出、查找字符串等操作。

vim_127">vim下各模式的切换

指令: vim 文件名

# 示例:
vim test.c

进入 vim 后默认为命令模式(普通模式),要输入文字需切换到插入模式。

  • 命令模式 切换至 插入模式
    输入 i:在当前光标处进入插入模式。
    输入 a:在当前光标的后一位置进入插入模式。
    输入 o:在当前光标处新起一行进入插入模式。

  • 命令模式 切换至 底行模式
    输入 Shift+; 即可,实际上就是输入 :

  • 插入模式底行模式 切换至 命令模式
    Esc 键即可。

vim_149">vim命令模式各命令汇总

移动光标:

  • k:光标上移。
  • j:光标下移。
  • h:光标左移。
  • l:光标右移。

删除:

  • x:删除光标所在位置的字符。
  • dd:删除光标所在行。

复制粘贴:

  • yy:复制光标所在行。
  • p:将已复制的内容在光标的下一行粘贴。

撤销:

  • u:撤销。
  • Ctrl+r:恢复刚刚的撤销。

vim_173">vim底行模式各命令汇总

保存退出:

  • w:保存文件。
  • q:退出 vim,如果无法离开 vim,可在 q 后面跟一个 ! 表示强制退出。
  • wq:保存并退出。

linux%E7%BC%96%E8%AF%91%E5%99%A8---gccg++" rel="nofollow">Linux编译器 - gcc/g++

gcc/g++的作用

gccg++ 是 GNU 提供的 C 和 C++ 编译器,常用于将源代码转换为机器能够执行的二进制文件。编译过程包括四个步骤:

  1. 预处理(头文件展开、去注释、宏替换、条件编译)。
  2. 编译(C代码翻译成汇编语言)。
  3. 汇编(汇编代码转为二进制目标代码)。
  4. 链接(将汇编过程产生的二进制代码进行链接)。

gcc/g++语法

语法: gcc/g++ [选项] [文件]

常用选项:

  • -E:只进行预处理,不生成文件。
  • -S:编译到汇编语言,不进行汇编和链接。
  • -c:编译到目标代码
  • -o:将处理结果输出到指定文件。
示例:
gcc -E test.c -o test.i   # 只进行预处理
gcc -S test.i -o test.s   # 编译到汇编
gcc -c test.s -o test.o   # 汇编成目标文件
gcc test.o -o test        # 链接成可执行文件

静态库与动态库

静态库是指编译链接时,把库文件的代码全部加入到可执行文件当中,生成的文件较大。但运行时不再需要库文件。静态库一般以 .a 为后缀。

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件当中,而是在程序运行时由链接文件加载库,这样可以节省系统的开销。

动态库一般以 .so 为后缀。

gcc test.c -o test_s -static

生成的可执行文件使用静态链接。


linux%E8%B0%83%E8%AF%95%E5%99%A8---gdb" rel="nofollow">Linux调试器 - gdb

gdb使用须知

程序发布方式:

  • debug版本:程序本身会被加入更多的调试信息,以便于进行调试。
  • release版本:不会添加任何调试信息,是不可调试的。

gdb命令汇总

进入gdb

gdb ./test_debug

调试命令

  • run:运行代码。
  • next:逐过程调试。
  • step:逐语句调试。
  • continue:继续执行到下一个断点。

linux%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E5%8C%96%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7---makemakefile" rel="nofollow">Linux项目自动化构建工具 - make/Makefile

make/Makefile的重要性

Makefile 用于管理程序的自动化编译,指定文件之间的依赖关系及构建方法。

依赖关系和依赖方法

文件 A 的变更会影响文件 B,那么文件 B 就依赖于文件 A。

示例:
test.o: test.cgcc -c test.c -o test.o

多文件编译

当工程中有多个源文件时,使用 make 工具按文件依赖顺序进行编译。

示例:
gcc -c test.c -o test.o
gcc -c main.c -o main.o
gcc test.o main.o -o mytest

项目清理

clean:rm -f *.o mytest

linux%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%B0%8F%E7%A8%8B%E5%BA%8F---%E8%BF%9B%E5%BA%A6%E6%9D%A1" rel="nofollow">Linux第一个小程序 - 进度条

行缓冲区的概念

行缓冲区影响数据的显示,数据会先写入缓冲区,直到缓冲区满或者程序结束时才显示。

示例:
printf("hello world");
sleep(3);

\r 和 \n

  • \r 回车:将光标移到当前行行首。
  • \n 换行:将光标移到下一行。
示例:
printf("Hello World\r");
printf("Goodbye World\n");

进度条代码及效果展示

示例代码:
#include <stdio.h>
#include <unistd.h>void show_progress_bar(int progress) {printf("\r[");int i;for (i = 0; i < 50; i++) {if (i < progress / 2) {printf("#");} else {printf(" ");}}printf("] %d%%", progress);fflush(stdout);
}int main() {for (int i = 0; i <= 100; i++) {show_progress_bar(i);usleep(50000); // Sleep for 50ms}printf("\nDone!\n");return 0;
}


http://www.ppmy.cn/embedded/167271.html

相关文章

804 唯一摩斯密码词

国际摩尔斯密码定义一种标准编码方式&#xff0c;将每个字母对应于一个由一系列点和短线组成的字符串&#xff0c; 比如: a 对应 ".-" &#xff0c;b 对应 "-..." &#xff0c;c 对应 "-.-." &#xff0c;以此类推。 为了方便&#xff0c;所有…

02、Hadoop3.x从入门到放弃,第二章:集群环境搭建

Hadoop3.x从入门到放弃&#xff0c;第二章&#xff1a;集群环境搭建 一、安装JDK并配置环境变量 /etc/profile中部分代码如下&#xff1a; for循环profile.d中的sh文件并使之生效&#xff0c;所以我们只需要在profile.d文件夹下配置我们的my_env.sh文件就好了 vim /etc/prof…

数据库 安装initializing database不通过

出现一下情况时&#xff1a; 处理方法&#xff1a; 将自己的电脑名称 中文改成英文 即可通过

【MySQL篇】MySQL操作库

目录 1&#xff0c;创建数据库 2&#xff0c;字符集和校验规则 2.1&#xff0c;查看系统默认字符集和校验规则 2.2&#xff0c;查看数据库支持的字符集 2.3&#xff0c;查看数据库支持的字符集校验规则而 2.4&#xff0c;校验规则对数据库的影响 3&#xff0c;操作数据库…

2025考研国家线首次全面下降,涵盖与24年对比分析!

2025年研考国家线发布&#xff0c;“调剂意向采集系统”将于3月28日开通&#xff1b;“调剂服务系统”将于4月8日开通。 “中国研究生招生信息网”中“调剂意向采集系统”将于3月28日开通&#xff0c;已完成一志愿录取的招生单位可发布调剂信息&#xff0c;有调剂意愿的考生可查…

23贪心算法

分发饼干 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {int i0,j0;int count0;sort(s.begin(),s.end());sort(g.begin(),g.end());while(i<g.size()&&j<s.size()){if(g[i]<s[j]){i;j;count;}else…

练习题:53

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 复杂度分析 可能遇到的问题及注意事项 代码实现 代码解释 运行思路 1. 变量初始化 2. 进入 while 循环 3. 执行循环体 4. 循环结束判断 5. 输出结果 结束语 Python题目 题目 使用while循环…

单目摄像头物体深度计算基础原理

三维空间物体表面点位与其在图像中对应点之间的相互关系&#xff0c;必须建立相机成像的几何模型&#xff0c;这些几何模型参数就是相机参数&#xff0c;而相机参数的求解就是相机标定。 相机的参数矩阵包括内参和外参&#xff1a; 外参&#xff1a;决定现实坐标到摄像机坐标。…