第22天Linux下常用工具

目录

第 1 章 vim 编辑器

1.1 vim 安装

1.2  vim 的使用

1.3 vim 的 4 种工作模式

第 2 章 gcc 编译器

2.1 编译流程(以 main.c 为例)

2.2 gcc 的常用参数

2.3 进行多模块编译

第 3 章 动态库静态库的制作

3.1 库的作用

3.2 库的分类与特点

3.3 静态库的制作

3.4 动态库的制作

3.5 更新动态库的操作


第 1 章 vim 编辑器

vim、vscode、gedit 皆为编辑器,为用户提供编写代码的平台。其中,vim 相对较难使用,在某些公司不允许私自安装软件的情况下,可能只能使用 Linux 系统自带的编辑器 vi。

vim 与 vi 有何关系呢?----vim 可理解为 vi 的扩展版。

1.1 vim 安装

使用以下命令进行安装:

sudo apt-get install vim

1.2  vim 的使用

1.2.1 打开 vim 文件:通过输入文件名即可打开。


1.2.2 关闭:

先按 ESC 键,退出到命令模式,然后输入冒号(Shift+;)进入底行模式,输入 wq,回车即可保存并退出。若要强制退出,可在底行模式输入 q!。

强制退出时可能会在再次打开时受阻,这是找到强制删除产生的文件,删除即可,但原文件可能未保存强制删除前刚进行的修改。

1.3 vim 的 4 种工作模式

  1. 命令模式:文件打开后的默认模式,可通过输入快捷指令直接实现对文件内容的操作。
    • 复制:
      • yy:复制光标所在的一行。
      • nyy:n 为要复制的行数,复制从光标所在位置开始向下的 n 行。
      • yw:复制光标所在位置的一个单词。
      • nyw:n 为要复制的单词数,复制从光标所在位置开始向后的 n 个单词。
    • 粘贴:p:粘贴到光标所在位置的下一行。
    • 剪切:
      • dd:剪切 / 删除光标所在的一行。
      • ndd:剪切 / 删除从光标所在位置开始向下的 n 行。
      • dw:剪切 / 删除光标所在位置向后的一个单词。
      • ndw:剪切 / 删除光标所在位置向后的 n 个单词。
    • 撤销:u:撤销一步操作,连续按可一直撤销。
    • 反撤销:ctrl+r:退回一步撤销操作。
    • 光标定位:
      • 光标回到文件开头:gg
      • 光标到文件末尾:G
  • 插入模式:可直接进行文件内容的编辑。在命令模式下,进入插入模式有以下几种方式:
    • a:插入光标所在位置之后。
    • A:插入光标所在位置行尾。
    • i:插入到光标当前位置。
    • I(大写的 i):插入到光标所在位置行首。
    • o:在光标所在位置下一行生成新的空行,并在空行插入。
    • O:在光标所在位置上一行生成新的空行,并在空行插入。
  • 可视模式:一次性的快捷指令操作,然后会退回命令模式。在命令模式下,按v进入可视模式,使用上下左右按键移动光标选中文本,选中文本之后:
    • y:复制。
    • d:剪切。
    • x:删除。
  • 底行模式:类似于终端,通过输入指令可对文件以及文件内容进行更加复杂的操作。
    • 进入底行模式的方法一:输入:后可进行以下操作:
      • w(回车):保存。
      • q(回车):退出。
      • wq(回车):保存并退出。在对应的操作后加!代表强制执行,例如:q!强制退出。
      • 文本替换:%s/原字符/修改后的字符/g(回车):全部替换;m,ns/原字符/修改后的字符/g(回车):将从 m 行到 n 行的替换。
      • 挪动整行的位置:xmy:将第 x 行放到第 y 行下面。
    • 进入底行模式的方法二:输入/ /字符串:进行字符串查找。

第 2 章 gcc 编译器

2.1 编译流程(以 main.c 为例)

编译流程分为以下几步:便记[ESC][ISO]

  1. 预编译:gcc -E main.c -o main.i -I./
  2. 编译(转汇编):gcc -S main.i -o main.s
  3. 汇编(转二进制):as main.s -o main.o(静态库和动态库都是以.o 文件为基础制作的)。
  4. 链接(链接库):gcc main.o -o main

2.2 gcc 的常用参数

  • -o:对生成的可执行文件命名。
  • -I(大写的 i):后面紧跟头文件路径(如果头文件和源文件在同一个路径下可以省略)。
  • -l(小写的 L):后面跟库名 (lib)。
  • -L:后面跟库的路径(即使库在当前路径下也不能省略)。
  • -g:生成带有调试信息的程序,比正常生成的可执行程序要大(配合明天要讲的代码调试工具)。
  • -c:执行编译四步的前三步(只编译不链接),生成.o 文件。

2.3 进行多模块编译

2.3.1 四步编译流程。

gcc -E main.c -o main.i
gcc -S main.i -o main.s
as main.s -o main.o
gcc main.o -o main

2.3.2 两步编译流程。

gcc -c main.c -o main.o -I./inc
gcc main.o -o main

此处的-I./inc是引用包含头文件,如果不需要可以不加 

第 3 章 动态库静态库的制作

3.1 库的作用

保护代码、封装代码、方便移植。

3.2 库的分类与特点

分为静态库和动态库。

  • 静态库的特点:以空间换时间。依赖静态库编译生成可执行程序时,会将静态库中的代码复制到可执行程序中去。所以生成的可执行程序所占空间更大,但运行所耗费的时间较少。更新静态库后,若不重新生成可执行程序,其功能不会跟着更新,需要重新生成可执行程序。使用静态库时,静态库更新了,可执行文件也需要更新
  • 动态库的特点:以时间换空间。依赖动态库编译生成可执行程序时,不会将动态库中的代码复制到可执行程序中去。所以生成的可执行程序所占空间小,但运行过程中会现场去动态库中查找用到的源代码并执行,所消耗的时间较多。更新动态库后,不更新可执行程序,可执行程序的功能会跟着更新,不需要重新生成可执行程序。使用动态库时,动态库更新了,可执行文件不需要更新,也能使用新的功能。

静态库关系图示:


动态库关系图示:


使用静态库和动态库生成的执行文件大小不同:

由静态库生成的main比动态库生成的mainm文件大一些

3.3 静态库的制作

  1. 准备好功能函数add.cadd.h等。
  2. 将功能函数只编译不链接生成.o 文件(一个一个来,有几个.c 生成几个.o):
    • gcc -c add.c -o add.o
    • gcc -c jian.c -o jian.o

  • 将这些.o 文件打包成静态库:ar -rc libxxx.a *.o(这里的 xxx 是可以随意填写的,不要出现中文)。

  • 依赖静态库生成可执行文件:gcc main.c -l(小写 L)库名(只写 xxx, lib 和.a 都不要) -L 库的路径 -I(大写的 i)头文件路径 -o main

3.4 动态库的制作

  • 准备好功能函数add.cadd.h等。
  • 将功能函数只编译不链接生成.o 文件。
  • 将这些.o 文件打包生成动态库:gcc -shared -fpic -o libxxx.so *.o(xxx 自己用英文命名)。
  • 将生成的动态库移动到系统的动态库检索路径下:sudo mv libxxx.so /usr/lib

  • 依赖动态库编译生成可执行文件:gcc main.c -l(小写的 L)库名(xxx) -I(大写的 i)头文件路径

3.5 更新动态库的操作

只需要重新编译生成动态库并移动到指定目录/usr/lib即可,不需要重新链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/15028.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

/// ts中的三斜线指令 | 前端

第一次看到注意到这行代码,不知道的还以为是注释呢,查了资料才知道这是typescript中的三斜线指令,那有什么作用呢? 1. 这行代码是TypeScript中的一个三斜线指令(Triple-Slash Directive),用于…

Schnorr 和 BLS 算法详解

Schnorr 签名和 BLS 签名在区块链技术中都有着重要的应用。它们各自具备独特的优势,使其在不同的区块链应用场景中得到广泛使用。 Schnorr签名算法 Schnorr签名算法是一种基于离散对数问题的数字签名算法, 由德国密码学家 克劳斯施诺尔 (Cl…

C++类和对象 - 拷贝构造, 赋值重载

拷贝构造函数 拷贝构造作用:一个已经存在的对象去初始化另一个要创建的对象 日常写代码中会出现如下场景: class Data { public:Data(int year, int month, int day) // 拷贝构造函数{this->_year year;this->_month month;this->_day day;} priva…

为什么咨询公司需要项目管理软件:7大关键优势

在咨询公司中,同时管理多个项目、客户和目标并非易事,尤其需要兼顾长期发展。项目管理软件就成为了各类项目型企业(包括咨询公司)的重要工具。 对于顾问来说,项目管理软件可以简化工作流程、增强客户关系并提高效率。本…

3大核心技术,免费开源的智能合同审查分析软件的技术介绍

本智能合同审查分析系统致力于解决法律领域中复杂文档与信息处理的难题,采用最先进的深度学习与自然语言处理(NLP)技术,提供精准的实体识别与关系抽取功能。系统基于BERT、GPT等主流模型,实现自动识别和关联法律文档中…

GitCode光引计划有奖征文大赛

一、活动介绍 GitCode平台汇聚了众多杰出的G-Star项目,它们犹如璀璨星辰,用各自的故事和成就,为后来者照亮前行的道路。我们诚邀广大开发者、项目维护者及爱好者,共同撰写并分享项目在GitCode平台上托管的体验,挖掘平…

UE4 Cook 从UAT传递参数给UE4Editor

需求 一句Cook的命令如下: ${EnginePath}/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -project${ClientPath}/${ProjectName}.uproject -noP4 -platformIOS -cooksinglepackage -client -clientconfig${CookConfig} -iterate -skipbuild -nocompile -NoMutex…

api驱动的云服务是什么意思?

API驱动的云服务是指利用API技术来驱动和提供云服务的模式。在这种模式下,云服务提供商会公开一系列的API接口,允许开发者或应用程序通过调用这些API来实现对云服务的访问和操作。API驱动的云服务是现代云计算技术的重要组成部分,API驱动的云…

Springboot 启动端口占用如何解决

Springboot 启动端口占用如何解决 1、报错信息如下 *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 9010 was already in use.Action:Identify and stop the process thats listening o…

【Rust调用Windows API】杀掉指定进程(包括兄弟进程、子进程、父进程)

前言 前面一篇文章写了使用Rust调用Windows API 获取正在运行的全部进程信息 ,本篇实现杀掉指定进程。 通过标准库可以管理当前进程创建的子进程,要 kill 掉子进程也比较容易,这里不赘述了,主要实现通过调用Windows API来杀掉兄…

基于Python的外卖点餐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

世界坐标系、相机坐标系、图像物理坐标系、像素平面坐标系

坐标系及其转换在计算机视觉领域占据核心地位。理解如何从一个坐标系转换到另一个坐标系,不仅是理论上的需要,也是实际应用中不可或缺的技能。 一、世界坐标系的定义 世界坐标系是一个全局的坐标系统,用于定义场景中物体的位置。在这个坐标…

Pycharm也可以用来查看和操作MySQL数据库?

1.首先确保自己的电脑安装好MySQL MySQL :: Download MySQL Community Server 2.在创建project界面选择Open 打开并选择自己存放sql文件的路径 完成后的效果 3.创建好数据库的连接 4.打开Database视窗 5.给数据库添加新的Schema 6.运行需要查看或者操作的sql文件 7.选择适合的…

1、VMware12安装ubuntu18.04

1、ubuntu18地址获取: Index of /ubuntu-releases/18.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2、安装过程: 1、新建虚拟机 2、选择稍后安装操作系统 3.客户机操作系统选择Linux,版本选择Ubuntu 64位 4、点击“自定义…

数据结构查找-哈希表(创建+查找+删除)+(C语言代码)

#include<stdlib.h> #include<stdio.h> #include<stdbool.h> #define NULLKEY -1//单元为空 #define DELKEY -2//单元内容被删除 #define M 20 typedef struct {int key;//关键字int count;//统计哈希冲突探测次数 }HashTable; //插入到哈希表 void InsertHT…

基于Java的周次生成工具类实现

摘要&#xff1a; 本文介绍了一个基于Java的周次生成工具&#xff0c;用于根据指定的年份和周次类型&#xff08;自然周或财务周&#xff09;生成连续的周次列表数据。 需求描述&#xff1a; 根据周次类型&#xff0c;生成连续的周次列表数据。 周次类型分2种&#xff1a; …

为什么华大严选基因是您的最佳选择?品牌特色全解析

《为什么华大严选基因是您的最佳选择&#xff1f;品牌特色全解析》 在当今基因检测市场竞争激烈的环境下&#xff0c;华大严选基因以其卓越的品质和独特的品牌特色脱颖而出&#xff0c;成为众多消费者的首选。作为 DNA 基因检测行业十佳优质品牌和 3・15 重点推荐品牌&#xff…

中仕公考怎么样?国考有三不限岗位吗?

国考有三不限岗位吗? “三不限”岗位&#xff0c;即不限制专业、学历和户籍的岗位。国考中几乎没有“三不限”岗位。因为公务员国考的报考条件通常较为严格&#xff0c;尤其是不限制条件的职位更少见&#xff0c;所以国考中一般是没有三不限岗位的。 与省考公务员不同的是&a…

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III

Day44 | 动态规划 &#xff1a;状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习&#xff1f;-CSDN博客 本次题解参考自灵神的做法&#xff0c;大家也多多支持灵神的题解 买卖股票的最佳时机【…

inode,请别忽视它!

在Linux文件系统中&#xff0c;inode 是一个不可忽视的核心概念。它不仅是文件系统运行的基石&#xff0c;还在内核、应用程序以及驱动程序开发中扮演着重要角色。如果你曾对文件的底层运作感到困惑&#xff0c;或者在面试中遇到文件系统相关问题&#xff0c;那么理解inode绝对…