Linux环境开发工具
Linux软件包管理器yum
Linux下安装软件方式:
- 源代码安装
- rpm安装——Linux安装包
- yum安装——解决安装源、安装版本、安装依赖的问题
yum对应于Windows系统下的应用商店
使用Linux系统的人:大部分是职业程序员
客户端怎么知道去哪里下载软件?
Linux生态:
- 开源(一种商业战略)
- 开源不等于免费
选操作系统的标准:生态好(使用者的角度)
站在OS的设计者和推动者,他们应该做什么?
提供云服务器和软件服务
安装rzsz
Windows和Linux下消息互传
yum list |grep lrzsz
yum install lrzsz.x86_64
yum remove -y lrzsz.x86_64#-y:是否询问
yum怎么知道去哪里下载?
yum内置下载链接
yum install -y epel-release#扩展yum源
Linux编辑器-vim使用
vim:文本编写——写代码(多模式编辑器)
命令模式(默认模式):用户所有的输入都会被当作命令,一般不会作为文本输入

命令模式下光标定位
gg:定位光标到最开始行
G:定位光标到最结尾行
n+G:定位光标到第n行
(n)yy:复制光标所在行(后n行)
(n)p:粘贴(n重复行)到光标所在下一行
(n)dd:剪切、删除(n行)
u:撤销命令
ctrl+r:撤销之前的撤销
$:定位光标到当前行结尾
^:定位光标到当前行开始
w、b:光标按照单词进行行内、跨行移动
h、j、k、l:光标按左、下、上、右移动
~:对光标所在字符进行大小写转换
(n)r:对光标及其之后共n个字符替换为新的字符(需输入)
R:替换模式,对光标所在内容进行重新输入
(n)x:对光标及其之后的字符进行删除,共删除n位
底行模式下命令
多文件如何处理?
vs+文件名:打开另一个文件编辑窗口
ctrl+ww:窗口光标切换
光标在哪一个窗口里面,就对哪一个窗口进行操作。
w!:强制保存
q!:强制退出
set nu:调出行号
set nonu:去掉行号
vim的简单配置
touch .vimrc
vim .vimrc
#一个用户一个vim配置文件,不会互相影响,不建议给root做配置
给普通用户添加白名单
sudo#新建的普通用户无法sudo,必须添加到白名单
#在root下操作
ll /etc/sudoers
#在/etc/sudoers中root ALL=(ALL) ALL下方添加
#用户名 ALL=(ALL) ALL

Linux编译器-gcc/g++使用
gcc mycode.c#用来编译C语言
g++ mycode.cpp#用来编译CPP
背景知识
为什么在windows或Linux上能编译运行对应的源文件?
需要在系统中提前安装C/C++开发相关的头文件、库文件
C/C++开发环境不仅仅指的是vs、gcc、g++,更重要的是语言本身的头文件和库文件。
安装vs,要选择对应的开发包,同步也在下载对应的头文件和库文件
编译型语言安装开发包一定需要下载对应的头文件和库文件
ls /usr/include/#linux下头文件和库文件所在位置
程序运行过程
- 预处理
gcc -E mycode.c -o mycode.i#生成.i文件
- 去注释
- 头文件展开
- 条件编译
#ifndef
#else
#endif
- 宏替换
条件编译的应用场景:
提供社区版和专业版的软件公司,需要维护两份代码吗?
不需要!根据不同的编译条件,在专业版裁减掉社区版不需要的功能即可。
- 编译(生成汇编)
gcc -S mycode.c -o mycode.s#生成.s文件
- 汇编(生成机器可识别代码)
gcc -c mycode.s -o mycode.o#生成mycode.o文件
od mycode.o#查看二进制文件内容
#mycode.o:可重定位目标二进制文件,简称目标文件,windows下的obj文件,不可以独立执行,需要经过链接后才能执行
- 链接(生成可执行文件或库文件)
gcc mycode.o -o mytest#直接生成可执行文件mytest
#将可重定位目标二进制文件和库文件进行链接才能形成可执行程序
动态库&&静态库
Linux下:.so(动态库)、.a(静态库)
Windows下:.dll(动态库)、.lib(静态库)
库有自己的命名规则:libname.so.XXX
机器默认值只会安装动态库
库其实就是把愿望呢间经过一定的翻译,然后打包——只给你提供一个文件即可,不用给你提供太多的源文件,也可以达到隐藏源文件的目的。
头文件提供方法的声明+库文件提供方法的实现+你的代码=你的软件
库的价值:不让我们做重复动作
我们的.o和库是如何链接的?
动态链接
动态库(共享库)
动态库不能缺失,一旦对应的动态库缺失,影响的不止一个程序,可能导致很多程序都无法正常运行。
ldd mytest#查看可执行程序依赖的动态库
静态链接
在编译器使用静态库进行静态链接的时候,会将自己的方法拷贝到目标程序中,该程序以后不会再依赖静态库
gcc mycode.c -o mytest
ldd mytest
#在Linux中,编译形成可执行程序,默认采用的就是动态链接,提供动态库
gcc mycode.c -o mytest -static#静态链接(体积变大)
#在Linux中,如果要采用静态链接的方式形成可执行程序,需要添加-static选项
centos yum安装C/C++静态库
sudo yum install -y glibc-static
sudo yum install -y libstdc++-static
- 如果没有静态库,能否执行-static?
不能
- 如果没有动态库,但是有静态库,而且gcc能找到?
gcc mycode.c -o mytest也可以运行,gcc默认优先动态链接
-static的本质:改变链接优先级
-
可执行程序不一定全是动态链接或者静态链接,可能都包括。
-
如果加-static,所有的链接要求都需要是静态链接
动静态链接的优缺点
动态库:
优点:动态库是共享库,可以有效的节省资源(磁盘空间、内存空间、网络空间)
缺点:动态库一旦缺失,会导致各个程序无法运行
静态库:
优点:静态库不依赖库,程序可以独立运行
缺点:体积大,比较消耗资源
Linux项目自动化构建工具-make/Makefile
make是一条指令
Makefile是当前目录下的一个文件
mycode: mycode.c#依赖关系gcc -o mytest mycode.c#依赖方法clean:rm -f mycode
- 依赖关系+依赖方法
make会自动推导Makefile中的依赖关系(栈式结构)
- 为什么只能make一次?
没有必要多次make,提高我们的编译效率
怎么做到的?
比较源文件和可执行程序的Modify(最近修改)时间
源文件形成可执行文件。
先有源文件,才有可执行。一般而言,源文件的Modify时间要比可执行的Modify时间早
如果我们更改了源文件,历史上还有可执行,那么源文件的Modify一定比可执行晚。
stat mytest#查看mytest的文件时间
#Access:文件被访问
#Change:文件属性被修改
#Modify:文件内容被修改
touch mytest#mytest已存在,把mytest的所有时间更新成最新的
make会根据源文件和可执行的新旧,判断是否需要重新执行依赖关系进行编译!
mycode: mycode.cgcc -o $@ $^
#$@:目标文件
#$^:源文件.PHONY:clean#伪目标,总是被执行
clean:rm -f mycode
使用git命令行
什么是git?
具有网络功能的版本控制器(开源)
client和server是一体的
本地仓库+远端仓库
git如何使用?
yum install git
git clone 链接
git add mycode
git commit -m "自己的练习代码"
git push
git的其他问题
git log#提交日志
git status#提交状态
#.gitignore
Linux调试器-gdb使用
debug&&release
debug可以被追踪、调试,形成可执行程序的时候会有调试信息
gcc默认编译是release方式发布的,不能直接调试
如果要以debug方式发布,必须携带-g选项
gcc -o mytest mycode.c -g
要被gdb调试,必须以debug方式发布
gdb命令
gdb mycode.c#开始调试mycode.c
q#退出调试,退出后上次调试信息会自动被清理掉
l 行号#显示源代码,每次列10行(行号所在位置在中间)
l 函数名#列出某个函数的源代码。
r#运行程序
b 行号#在行号打断点
info b#查看断点信息
d 断点编号#删除对应的断点信息
b 文件:行号#在对应文件行号打断点
n#逐过程
s#逐语句
p 变量#查看变量的信息
display 变量#常显示变量的信息
undisplay 编号#取消编号对应的常显示
until 行号#调试转到对应的行、快速跳过函数代码快
finish#结束当前函数的调试
c#跳到下一个断点
disable 断点编号#禁用断点
undisable 断点编号#启用断点
set 变量#设置变量的值
bt#查看各级函数调用及参数
info locals#查看当前栈帧局部变量的值
相关文章:
Linux环境开发工具
Linux软件包管理器yum Linux下安装软件方式: 源代码安装rpm安装——Linux安装包yum安装——解决安装源、安装版本、安装依赖的问题 yum对应于Windows系统下的应用商店 使用Linux系统的人:大部分是职业程序员 客户端怎么知道去哪里下载软件࿱…...
JupyterNotebook高级使用:常用魔法命令
%%writefile test.py def Test(name):print("Test",name,"success")运行结果:就是在我们的文件目录下面创建了这个test.py文件,主要是认识一下这个里面的%%writefile表示创建新的文件,这个文件里面的内容就是上面我们定义…...
C++ Primer 类的作用域
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
【建设工程经济】2.1-2.2 经济效果评价的相关概念及指标体系
一、学前建议 学习内容主要有: ①财务评价的内容:盈利能力分析、偿债能力分析、财务可持续能力分析(财务生存能力); ②经济效果评价方法分类:确定性和不确定性评价、定量分析和定性分析、静态分析和动态分…...
如何用ollama快速布署deepseek-r1大模型
deepseek在春节期间因为特朗普的一番发言而在中国已几乎人尽皆知,热度到了连90高寿的老父亲都向我推荐这个中国产的AI大模型,而且它是开源的!我试验了下,用ollama也可以快速度安装布署deepseek-r1大模型。本想写篇文章来介绍下dee…...
50页PDF|数字化转型成熟度模型与评估(附下载)
一、前言 这份报告依据GBT 43439-2023标准,详细介绍了数字化转型的成熟度模型和评估方法。报告将成熟度分为五个等级,从一级的基础转型意识,到五级的基于数据的生态价值构建与创新,涵盖了组织、技术、数据、资源、数字化运营等多…...
机器学习实战(8):降维技术——主成分分析(PCA)
第8集:降维技术——主成分分析(PCA) 在机器学习中,降维(Dimensionality Reduction) 是一种重要的数据处理技术,用于减少特征维度、去除噪声并提高模型效率。主成分分析(Principal C…...
面试编程题
1. 请写出string类的定义,要求有构造函数,析构函数,拷贝,赋值函数。 #include <cstring> #include <algorithm>class String { public:explicit String(const char* str nullptr){if(str){str_ new char[strlen(st…...
Transformer多头注意力并行计算原理与工业级实现:从数学推导到PyTorch工程优化
一、核心数学原理剖析 1.1 多头注意力矩阵分解 Q XW^Q ∈ R^{nd_k} K XW^K ∈ R^{nd_k} V XW^V ∈ R^{nd_v} 多头分解公式: head_i Attention(QW_i^Q, KW_i^K, VW_i^V) 其中 W_i^Q ∈ R^{d_kd_k/h}, W_i^K ∈ R^{d_kd_k/h}, W_i^V ∈ R^{d_vd_v/h} (h为头数…...
我的2025年计划
新春佳节已过去了,又是一年伊始,即将步入漫长的工作、生活中了。一年之计在于春,我也不能免俗。 本文从工作生活两方面,列出一些计划。到年底,再回过头来看看,有哪些实现了,有哪些未实现。 工作…...
软件开源与AI开源的区别
一.软件开源 软件开源是指软件的源代码对公众开放,允许用户自由使用、修改和分发的软件。 核心特性:低成本(通常免费)、高可定制性(源代码可用,开发人员可以修改)、社区支持(庞大的…...
前端插件使用xlsx-populate,花样配置excel内容,根据坐添加标替换excel内容,修改颜色,合并单元格...。
需求要求:业务人员有个非常复杂得excel表格,各种表头等,但是模板是固定得。当然也可以实现在excel上搞出各种表格,但是不如直接用已有模板替换其中要动态得内容方便,这里我们用到CSDN得 xlsx-populate 插件。 实列中我…...
分布式大语言模型服务引擎vLLM论文解读
论文地址:Efficient Memory Management for Large Language Model Serving with PagedAttention 摘要 大语言模型(LLMs)的高吞吐量服务需要一次对足够多的请求进行批处理。然而,现有系统面临困境,因为每个请求的键值…...
如何开发一个大模型应用?
1. 背景 AIGC技术的突破性进展彻底改变了技术开发的范式,尤其是以GPT为代表的LLM,凭借其强大的自然语言理解与生成能力,迅速成为全球科技领域的焦点。2023年末,随着ChatGPT的爆火,AIGC技术从实验室走向规模化应用&…...
01-零基础入门嵌入式系统
1.什么是嵌入式系统 首先我们要知道计算机系统分为大型机、通用计算机和嵌入式系统三大类。 计算机系统的发展,经历了由1台计算机系统为N个人服务的大型机时代到由1台计算机系统为1个人服务的PC时代,正在步入由N台计算机系统为1个人服务的嵌入式时代。 嵌…...
【机器学习】CNN与Transformer的表面区别与本质区别
仅供参考 表面区别 1. 结构和原理: CNN:主要通过卷积层来提取特征,这些层通过滑动窗口(卷积核)捕捉局部特征,并通过池化层(如最大池化)来降低特征的空间维度。CNN非常适合处理具有网格状拓扑结构的数据,如图像。Transformer:基于自注意力(Self-Attention)机制,能…...
[数据结构]二叉搜索树详解
目录 一、二叉搜索树的概念 二、二叉搜索树的性能分析 三、二叉搜索树的中序遍历用于排序去重 四、二叉搜索树的查找 1、查找的非递归写法 2、查找的递归写法 五、二叉搜索树的插入 1、插入的非递归写法 2、插入的递归写法 六、二叉搜索树的删除 1、删除的非递归写法…...
撕碎QT面具(2):groupBox内容居中显示
问题描述: 当笔者在GroupBox中使用Form Layout构建图中内容时,不能居中显示。 解决方案: 1、首先在form layout左右添加横向弹簧,并ctrl进行选中这三个控件。点击水平布局,让中间的控件不变形。 2、选中groupBox&#…...
SpringBoot速成(14)文件上传P23-P26
1. 什么是 multipart/form-data? 想象一下,你有一个包裹要寄给朋友,但包裹里有不同类型的东西:比如一封信(文字)、一张照片(图片)和一个小礼物(文件)。为了确…...
图论入门算法:拓扑排序(C++)
上文中我们了解了图的遍历(DFS/BFS), 本节我们来学习拓扑排序. 在图论中, 拓扑排序(Topological Sorting)是对一个有向无环图(Directed Acyclic Graph, DAG)的所有顶点进行排序的一种算法, 使得如果存在一条从顶点 u 到顶点 v 的有向边 (u, v) , 那么在排序后的序列中, u 一定…...
PTA:使用指针方式求一个给定的m×n矩阵各行元素之和
本题要求编写程序,使用指针方式求一个给定的mn矩阵各行元素之和。(例如:scanf("%d", *(matrix i) j); // 使用指针方式访问二维数组元素) 输入格式: 输入第一行给出两个正整数m和n(1<m<6, 1<n&…...
【iOS】SwiftUI状态管理
State ObservedObject StateObject 的使用 import SwiftUIclass CountModel: ObservableObject {Published var count: Int 0 // 通过 Published 标记的变量会触发视图更新init() {print("TimerModel initialized at \(count)")} }struct ContentView: View {State…...
自制简单的图片查看器(python)
图片格式:支持常见的图片格式(JPG、PNG、BMP、GIF)。 import os import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTkclass ImageViewer:def __init__(self, root):self.root rootself.root.…...
ChatGPT行业热门应用提示词案例-AI绘画类
AI 绘画指令是一段用于指导 AI 绘画工具(如 DALLE、Midjourney 等)生成特定图像的文本描述。它通常包含场景、主体、风格、色彩、氛围等关键信息,帮助 AI 理解创作者的意图,从而生成符合要求的绘画作品。 ChatGPT 拥有海量的知识…...
Visual Studio Code的下载安装与汉化
1.下载安装 Visual Studio Code的下载安装十分简单,在本电脑的应用商店直接下载安装----注意这是社区版-----一般社区版就足够用了---另外注意更改安装地址 2.下载插件 重启后就是中文版本了...
分词器(Tokenizer) | 有了分词器,为什么还需要嵌入模型
文章目录 什么是tokenizer有了分词器,为什么还需要嵌入模型分词器为什么在transformers 里Hugging Face的Tokenizer大模型不同tokenizer训练效果对比分词器库选择当前顶尖大模型所采用的 Tokenizer 方法与词典大小 参考 什么是tokenizer Tokenizers huggingface官方…...
scala中 隐式转换
一、 隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一种类型 例如: int --> double object test {// 复习隐式转换// 隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一…...
实战开发coze应用-姓氏头像生成器(上)
欢迎关注【AI技术开发者】 上次,我们开发了一个对话形式的头像生成器智能体(Agents),广受大家欢迎。 同时也接收到一些用户的反馈,生成前无法看到头像样式、初次使用不会用等等。 对此,我准备使用Coze开…...
【Node.js】express框架
目录 1初识express框架 2 初步使用 2.1 安装 2.2 创建基本的Web服务器 2.3 监听方法 2.3.1 监听get请求 2.3.2 监听post请求 2.4 响应客户端 2.5 获取url中的参数(get) 2.5.1 获取查询参数 2.5.2 获取动态参数 2.6 托管静态资源 2.6.1 挂载路径前缀 2.6.2 托管多…...
JS逆向实战三:1688工厂信息
本文说明:B站学习笔记整理,仅供学习参考~~ 网站:https://sale.1688.com/factory/category.html 1. 页面分析与解密 刷新页面,通过对关键词进行搜索,实现接口定位。 通过多次刷新页面或者页面翻页,找到变化…...
