Linux 操作系统编译器、静态库、动态库

1、编辑器

1.1、vim的安装

指令:sudo apt-get install vim

1.2 vim的使用

        格式:vim 文件名

        如果文件存在,只打开,文件不存在,创建并打开

        vim的4中模式:

        命令模式,插入模式,底行模式,可视模式

1.2.1命令模式

复制,粘贴,删除,剪切等

切换命令模式

1直接vim打开文件,默认就是命令模式

2不管当前是什么模型,按下Esc就可以快速回到命令模式

复制指令:

        yy--复制光标所在位置的一整行

        nyy--复制光标所在位置往下n整行

        yw--复制光标所在位置的一个单词

        nyw--复制光标所在位置往后的n个单词

粘贴:

        p--粘贴

删除/剪切

        x--删除光标所在位置的单字符

        X--删除光标所在位置的前一个位置的单字符

        dd--删除/剪切光标所在位置的一整行

        ndd--删除/剪切光标所在位置的往下的n整行

        dw--删除/剪切光标所在位置的第一个单词

        ndw--删除/剪切光标所在位置的往后的n个单词

        d$ 删除/剪切光标所在位置到行尾的所有内容

        d^ 删除/剪切光标所在位置到行首的所在内容

撤销:u

反撤销:ctrl + r

gg--光标快速回到文件开头

G -- 光标快速回到文件末尾

gg=G 文件中的内容会格式化对齐

1.2.2 插入模型--编写程序

切换插入模式:第一步先回到命令模式(Esc)

i: 插入到光标所在位置
I: 插入到光标所在位置的行首
a: 插入到光标所在位置的下一个位置
A: 插入到光标所在位置的行尾
o: 插入到光标所在位置的下一行
O: 插入到光标所在位置的上一行
记其中任意一个即可

1.2.3 底行模式

字符串替换,查找,保存,退出

方式1:切换底行模式

第一步先回到命令模式(Esc)

第二步输入冒号切换底行模式

保存:w+(回车)

退出: q+(回车)

保存并退出:wq+(回车)

强制退出:q!(回车)

文本替换:

        整体替换:%s/原本的字符串/新的字符串/g

        部分替换:m,ns/原本的字符串/新的字符串/g

整行换位置:

        :xmy         将第X行,移动到第y行的后边

方式2:切换底行模式

第一步先回到命令模式(Esc)

第二步输入:(切换底行模式)

字符串查找:

/字符串(回车)

n 往后继续查找

N 往前继续查找

1.2.4可视模型--复制,剪切

先回到命令模式(Esc),再用V切换到可视模式(一次有效)

y--复制         d--剪切        x--删除

2 编译器

2.1 编译流程:


1:预处理:gcc-E main.c -o main.i

2 : 编译(转汇编):gcc -S main.i -0 main.s

3 :汇编(转二进制):as main.s -o main.o

4 :链接(衔接库):gcc main.o -o main

2.2 gcc 的参数

-c:只编译,不衔接,相当于编译流程的前三步

-o: 重命名

-I(大写的i):后面紧跟头文件路劲

-l(小写的L):后面库名

-L:后面跟库路径(即使是当前路径也要加)

-g:生成带有调试信息的可执行程序

使用 gdb做调试。需要加参数-g

3 库

3.1 库的作用

保护源码,方便移植

3.2 LInux下库的分类

静态库,动态库;

3.3:静态库

特点:以空间换时间,在生成可执行程序的时候,复制了一份库到当前的可执行程序中,生成的可执行程序较大,浪费空间,但是节省时间。

制作流程:

第一步:准备功能函数(不能有main函数):这里以加减乘除的功能函数为例,指令以Fun.c为例。

第二步:将功能函数的.c只编译不链接,生成.o

指令:gcc -c Fun.c -o Fun.o

第三部:ar -rc libxxx.a *.o         --xxx-库名

验证库:

方式1:.h 不封装

方式2:.h文件封装到include 中,需要指名头文件路径

3.4 动态库

特点:以时间换空间,在生成可执行程序的时候,保留了库中函数的入口到当前的可执行程序中,真正运行的时候,去相应的库里执行函数,浪费了时间,但是节省空间。

制作流程:

第一步:准备功能函数(不能有main函数):Fun.c

第二步:打包成库

指令:

gcc -c -fpic Fun.c -o Fun.o

第三部:打包成库

指令:

gcc -shared -fpic -o libXXX.so *.o XXX-库名

验证库:

1->将库放到指定路劲下:sudo mv 库名 /usr/lib

指令:

sudo mv liblood.so /usr/lib

2->gcc main.c -o mian -liblood -I./include

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JumpServer 运维指南

修改HTTP访问端口 rootuvm-01:/opt/tools/jumpserver-offline-installer-v3.10.7-amd64# ./jmsctl.sh reconfig./jmsctl.sh: line 204: down: command not found 1. Configure Private Key complete2. Configure Persistent Directory Do you need custom persistent store, …

Excel数据处理:高级筛选、查找定位、查找函数(VLOOKUP)

高级筛选 先去选中筛选区域 如果筛选的条件在同一行那么就是且的关系 如果筛选的条件不在同一行那么就是或的关系 查找定位空值 使用VLOOKUP函数

渗透测试入门教程,从零基础入门到精通(非常详细)

目录 什么是渗透测试 渗透测试的重要性 渗透测试的前置技能 开始入门学习路线 什么是渗透测试 渗透测试,通常被视为模拟黑客的一种安全评估行为,其目的在于全面挖掘目标网站或主机的潜在安全漏洞。与真实的黑客攻击不同,渗透测试旨在发现…

Spring定时器 Cron表达式的用法

前言 Cron表达式是一种用于描述定时任务执行时间的字符串格式,这种表达式基于时间字段来定义任务应该在哪些时间点执行,通常包含六个或七个用空格隔开的字段,分别代表秒、分钟、小时、日期、月份和星期(年份是可选的)…

嵌入式系统中AI可以提高开发效率方法

未来是 AI 的时代,博主最近写代码都喜欢用 AI 写个草稿,修修改改就能用,大幅提高了工作效率。举个例子: 指令:写一个使用 kfifo 的内核模块 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/kfifo.…

系统架构最佳实践 -- 相关JAVA架构

1. java 类加载器架构 2. JVM 架构 3. Java 技术体系 4. 线程运行架构 5. Java 体系&#xff08;编译与运行&#xff09;结构 6. JMS 技术架构 7. JMX 技术架构 8. Spring 架构 9. Hibernate 架构 10. ibatis 架构 11. Struts2 架构 12. Struts1 架构 13. JBPM 14. EJB 技术架构…

万字总结!Docker简介及底层关键技术剖析

本文首发在个人博客上&#xff1a;万字总结&#xff01;Docker简介及底层关键技术剖析 Docker 简介 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#x…

滚动条详解:跨平台iOS、Android、小程序滚动条隐藏及自定义样式综合指南

滚动条是用户界面中的图形化组件&#xff0c;用于指示和控制内容区域的可滚动范围。当元素内容超出其视窗边界时&#xff0c;滚动条提供可视化线索&#xff0c;并允许用户通过鼠标滚轮、触屏滑动或直接拖动滑块来浏览未显示部分&#xff0c;实现内容的上下或左右滚动。它在保持…

补档 -- 测试的分类(1)

最近有很多人私信我说: 灰灰你什么时候写测试分类阿, 本来我要开始肝性能测试的, 我一看, 奥, 之前摸鱼忘写了, 所以这里补档(叶问指着一边笑.jpg). 总览 标红的需要注意一下. 为什么要对软件测试进行分类? 软件测试是软件生命周期的一个重要环节, 具有较高的复杂性, 对于软…

排序 “叁” 之交换排序

目录 1. 基本思想 2.冒泡排序 2.1 基本思想 2.2 代码示例 2.3 冒泡排序的特性总结 3.快速排序 3.1 基本思想 &#x1f335;hoare版本 &#x1f335;挖坑法 ​编辑 &#x1f335;前后指针版本 ​编辑 3.2 快速排序优化 &#x1f33b;三数取中法选key 3.4 快速排序…

如何在群晖NAS部署office系统办公服务并实现无公网IP远程编辑文件

文章目录 本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是&#xff1a; 1.Word&#xff0c;PPT&#xff0c;Excel等重要文件存在本地环境&#xff0c;如何在编…

宝塔面板MYSQL自动停止解决办法

宝塔面板MYSQL自动停止解决办法 在使用宝塔的过程中&#xff0c;经常会遇到了 MySQL 自动停止的问题&#xff0c;尤其是配置低一些的服务器。导致 MySQL 停止的情况有很多种&#xff0c;这里不再多述。 下面教大家怎么解决这一问题。在宝塔的计划任务里添加一段 shell 命令&a…

Umi.js:登录之后需要手动刷新权限菜单才能渲染

在使用Umi.js开发后台管理页面时&#xff0c;用户登录之后&#xff0c;总是需要手动刷新一次页面&#xff0c;才能够拿到全局状态/权限信息。 问题描述 结合使用umi/plugin-layout和umi/plugin-access&#xff0c;登录进入页面&#xff0c;配置的权限菜单未渲染&#xff0c;需…

BPMN2.0 任务-任务监听器

任务监听器(task listener)用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。 任务监听器只能在流程定义中作为用户任务的子元素。请注意,任务监听器是一个Flowable自定义结构,因此也需要作为BPMN 2.0 extensionElements,放在flowable命名空间下。 <us…

javaWeb项目-大药房管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java语言简介 Ja…

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 一、检查服务是否开启 找到 【Docker Desktop Service】&#xff0c;然后&#xff0c;启动他&#xff1b; 你也可以直接设置为“自动” 找到服务&#xff0c;右键》属性》启动类型&#xff1a;自动》点击…

医疗实施-项目管理03-项目启动会

项目启动会 内部启动会目标过程详述作用 外部启动会目标过程详述作用 一般在项目完成从销售完移交到项目实施部之后&#xff0c;需要先后进行项目内部启动会与外部启动会的进行。这两个启动会对整个项目实施起到的推动作用&#xff0c;我依次介绍一下这两个启动会的目标、过程方…

三. TensorRT基础入门-TensorRT简介

目录 前言0. 简述1. 什么是TensorRT2. TensorRT的工作流介绍3. TensorRT的一些限制总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第三章—TensorRT 基础入门&#xf…

三、Flask模型基础

ORM 创建模型 # exts.py:插件管理 # 扩展的第三方插件 # 1.导入第三方插件 from flask_sqlalchemy import SQLAlchemy # ORM插件 from flask_migrate import Migrate # 2. 初始化 db = SQLAlchemy() # ORM migrate = Migrate() # 数据迁移 # 3. 和app对象绑定 def init_ex…

kafka实验部署

一、前期准备 二、kafka实验 在zookeeper后继续进行操作 2.1 为ndoe1、node2、node3作出部署 2.1.1 解压kafka压缩包&#xff08;node1举例&#xff09; 2.1.2 操作 将解压后的kafka移动到kafka&#xff0c;进入到kafka下的config中&#xff0c;复制文件 2.1.2.1 编辑server.pr…