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,一经查实,立即删除!

相关文章

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

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

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

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

Spring定时器 Cron表达式的用法

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

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

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

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

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

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

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

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

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

排序 “叁” 之交换排序

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

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

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

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

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

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

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

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

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

三. TensorRT基础入门-TensorRT简介

目录 前言0. 简述1. 什么是TensorRT2. TensorRT的工作流介绍3. TensorRT的一些限制总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习课程第三章—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压缩包(node1举例) 2.1.2 操作 将解压后的kafka移动到kafka,进入到kafka下的config中,复制文件 2.1.2.1 编辑server.pr…

【笔试训练】day7

1.在字符串中找出连续最长的数字串 思路&#xff1a; 简单双指针&#xff0c;随便怎么暴力 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std;int main() {string str;cin >> str;int ans …

聚道云软件连接器助力医疗器械有限公司打通金蝶云星辰与飞书

摘要 聚道云软件连接器成功将金蝶云星辰与飞书实现无缝对接&#xff0c;为某医疗器械有限公司解决采购订单、付款单同步、审批结果回传、报错推送等难题&#xff0c;实现数字化转型升级。 客户介绍 某医疗器械有限公司是一家集研发、生产、销售为一体的综合性医疗器械企业。…

【linux运维】系统常见管理命令

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了学习基本的shell编程和linux命令&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于b站大学——linux运维课程进行的&#xff0c;…

安装多个MySQL版本时如何连接到不同的数据库

当安装多个版本的数据库时&#xff0c;不同版本的端口名不一样&#xff0c;可以使用以下命令进行连接 mysql -uroot -p数据库密码 -h主机名 -P端口号 数据库主机名默认是localhost&#xff0c;端口号默认是3306&#xff0c;当安装多个版本数据库时&#xff0c;需要记住数据库的…

【多线程】CAS的应用 | CAS的概念 | 实现原子类 | 实现自旋锁

文章目录 一、CAS1.什么是CAS2.实现原子类3.实现自旋锁 一、CAS 1.什么是CAS Compare and swap 比较并交换。 比较交换的是 内存 和 寄存器 比如此时有一个内存 : M。 还有两个寄存器A,B ​ CAS ( M , A , B ) :如果M和A的值相同的话&#xff0c;就把M和B的值进行交换(交换的…