当前位置: 首页 > news >正文

Linux开发环境配置(下)

请添加图片描述

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌟🌟 追风赶月莫停留 🌟🌟
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
🌟🌟 平芜尽处是春山🌟🌟
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅

🍋Linux开发环境配置

  • 🍑Linux编译器--gcc/g++使用
    • 🍍程序执行
    • 🍍预处理
    • 🍍编译
    • 🍍汇编
    • 🍍链接
    • 🍍动态库和静态库
  • 🍑Linux调试器--gdb使用
    • 🍍背景
    • 🍍相关指令
  • 🍑自动化构建工具--make/Makefile
    • 🍍背景
    • 🍍应用实例

🍑Linux编译器–gcc/g++使用

前面我们已经完成了vim的配置,接下来我们就要正式学习如何编译代码了,无论是C语言还是c++、java等计算机语言,在vim下编译,都要先在安装该指令,前面我们介绍的是Linux为cenos7版本现在我们是在ubuntu中,两者大径相同安装指令也差不多。如:安装c++语言编译器

yum install -y gcc-c++ //cenos7版本下
apt install -y gcc-c++ //ubuntu版本下

在Linux中gcc/g++执行指令:

gcc + -o + 指定文件名 + 原文件名  //c执行指令 
g++ + -o + 指定文件名 + 原文件名  //c++执行指令

🍍程序执行

在这里插入图片描述

如上图中,test.c是提前写好的C语言程序文件,当我们使用gcc执行指令时间,系统会给我们生成一个绿色标注的文件,这个就是可执行文件。

在这里插入图片描述
当我们运行该可执行文件,就会打印输出我们提前准备好的信息。

🍍预处理

预处理是g++编译过程的第一步,它主要处理源代码中的伪指令(以#开头的指令,如宏定义、条件编译指令、包含指令等)和特殊符号。经过预处理过程后,会生成一个没有宏定义,没有条件编译指令、没有特殊符号(除了编译器需要的#pragma指令)的输出文件(通过以 .i 作为文件拓展名)。

在程序进行中查看预处理的指令:

gcc + -E +.c文件名 + -o + 定义.的i文件名

在这里插入图片描述
当我们输入执行指令后,会生成.i的文件,.i 文件就是预处理代码在此文件中,如下图,并且程序运行预处理阶段会自动停下来。
在这里插入图片描述

🍍编译

该阶段是编译过程的第二个阶段,它将预处理后的代码转换成汇编语言。在这个阶段,编译器会进行词法分析、语法分析、语义分析以及优化等操作。最终,编译器会生成一个汇编语言文件(通常以 .s 作为文件拓展名)。

在程序中查看编译阶段的指令:

gcc -S 原有的 .i 文件 + -o + 新定义的 .s 文件名

在这里插入图片描述
当我们输入编译指令时,系统会生成 .s 为拓展名的文件,该文件是存储编译阶段的汇编代码,如下图

在这里插入图片描述

🍍汇编

该阶段是编译过程中的第三个阶段,它将编译阶段生成的汇编语言文件转换成二进制格式的目标文件,这个过程涉及到将汇编指令翻译成机器指令,并生成最终可以在计算机上执行的代码。

在程序中查看汇编阶段的指令:

gcc + -c +.s文件 + -o 新定义.o文件名

在这里插入图片描述

当我们输入汇编执行指令,系统会生成一个以 .o 作为拓展名的文件,它里面是将汇编代码转换成二进制形式,所以我们看到的是乱码形式,如下图。

在这里插入图片描述

🍍链接

该阶段是编译过程中的第四个阶段,也是最后一个阶段。它主要将编译阶段和汇编阶段生成的目标文件以及所需的库文件组合成一个可执行文件。在这个过程中,链接器会解决所有符号引用,并将所有相关的代码和数据合并到一个文件中,使其能够在计算机上运行。

在程序中查看链接阶段的指令:

gcc +.o文件名 + -o + 新定义文件名

在这里插入图片描述
当我们输入链接执行指令,系统会生成一个test标绿的文件,这就是可执行文件,可以运行,如下图

在这里插入图片描述

🍍动态库和静态库

动态库是动态链接的库,动态库又被称为共享库,这是因为动态库中的内容是被所有程序共享的,就类似于一个功能块的程序,谁需要谁就可以调用它。gcc进行函数库的链接时可以选择静态链接还是动态链接,但是在Linux中系统默认是动态链接。

在这里插入图片描述
file是可以查看该文件的链接情况,也可以使用 ldd+文件名 来查看,只不过file查看的信息更详细,如下图
在这里插入图片描述

上图中libc.so是动态链接的标志,其中lib是前缀, .so是后缀,去掉前缀和后缀,最后为c,可以看出该文件调用的是C语言共享库,及动态链接。

静态库是采用静态链接的方式;静态链接不同于动态链接共享的方式,如果调用静态库,会将自己所需要的代码拷贝至程序中,完成拷贝后,后续将不需要再调用静态库。

如果想采用静态库的链接形式编译程序,需要再编译时加上-static选项,当然前提得有静态库,没有的话可以通过

apt install -y glibc-static 

该指令下载静态库,当然我们也可以利用ldd 来查看文件是否为静态链接,如下图。

在这里插入图片描述

在实际过程中,动态库和静态库各有各的优点和缺点。

静态库

  1. 优点:不依赖库,同类型平台中都可以直接运行使用。
  2. 缺点: 可执行程序体积比较大,比较浪费资源、内存、网络等资源。

动态库:

  1. 优点: 节省资源,不会出现太多的重复代码。
  2. 缺点: 对库的依赖性较强,一旦库丢失,所有使用这个库的程序都无法运行。

🍑Linux调试器–gdb使用

🍍背景

gdb是GNU开源组织发布的一个强大的命令行调试工具,它在Linux操作系统下主要用于调试,使用多种编程语言(如C、C++、Java、Python等)编写的程序。GDB是一个功能强大的程序调试工具,它可以帮助开发人员更快地定位和修复程序中的缺陷,提高代码质量和开发效率。

GDB具有众多功能:
启动程序:GDB可以启动被调试的程序,并按照用户自定义的方式运行程序。
设置断点:用户可以在程序中任何需要的地方设置断点,当程序运行到这些断点时,会自动暂停执行,以便用户进行调试。
查看程序状态:在程序暂停时,用户可以查看程序的运行状态,包括变量值、寄存器内容、内存值以及堆栈信息等。
单步执行:GDB支持逐语句和逐过程两种单步执行方式,用户可以选择进入函数内部进行详细调试,也可以选择直接调用函数而不进入其内部。
修改程序:在调试过程中,用户还可以修改程序中的变量值或执行顺序,以验证程序的正确性。

使用该调试工具时,需要提前下载好:

sudo apt install -y gdb

🍍相关指令

指令含义
l+行号显示指定行之后的代码(gdb会自动记录最后一条指令)
b+行号/函数名/file:行号对指定位置打断点
info+行号查看我们所打的断点
d+断电编号删除断点
disable/enable+断电编号使能(禁用/开启)断电
n逐过程,也就vs调试中的F10(类似于逐行语句调试)
s逐语句,也就vs调试中的F11(类似于能进入函数调试)
p+变量显示变量的内容和地址(可以查看变量的大小)
display+变量名/变量地址常显示
undisplay+编号取消常显示变量的内容和地址
c从一个断电到下一个断电(范围查找)
bt查看调用堆栈
finish将一个函数运行结束,就停下来(范围查找)
until+行号在一个范围内,直接运行到指定行(范围查找)

🍑自动化构建工具–make/Makefile

🍍背景

在Linux系统中,自动化构建项目是提高开发效率、减少重复劳动的关键环节。其中,make工具和其配置文件Makefile是实现这一目标的重要工具组合。

make是一个在Linux下广泛使用的自动化构建工具,它可以根据一个Makefile文件中的指令来自动执行编译、链接等操作,从而生成一个可执行文件或者库文件。make工具通过读取Makefile文件(或makefile,不区分大小写),并根据文件中的指令执行相应的命令,这些命令通常包括编译、链接等,用于生成最终的可执行文件或库文件。

Makefile是一个文本文件,它包含了一系列的规则(rules)、目标(targets)、依赖(dependencies)和命令(commands)。每个规则定义了一个目标文件(通常是编译或链接的结果),以及生成该目标文件所需的依赖文件和要执行的命令。

🍍应用实例

make指令要搭配文件Makefile使用,两者缺一不可。

我根据test.c文件对大家进行实例演示:

  1. 创建Makefile文件
    在这里插入图片描述
  2. 对test.c文件进行Makefile代码编写

在这里插入图片描述
上述图中,代码的含义是test可执行文件依靠的是test.c文件,而下面那行代码就是".c"文件生成".o"的可执行文件。

  1. 执行make

在这里插入图片描述

上面几步就是一个简单Makefile文件代码的编写,在实际使用该工具时,不会那么简单,既然有生成该可执行文件,那有没有删除的呢?

在这里插入图片描述

在这里插入图片描述

上述图中我间接使用了".PHONY"来执行clean,".PHONY"是一个伪目标,是Makefile文件中的一个关键字,意思为某个对象生成伪目标,这样就能在不对的源文件进行修改,重复执行任务了。

Makefile文件对make指令来说,第一个执行目标往往是优先权,仅仅只会执行主目标,也就是从上往下数的第一个执行目标,剩下的目标要执行就需要使用伪目标。

还有另外一种实际使用情况,现在这里是仅生成一个可执行文件,当我们需要同时能生成多个可执行文件时,就需要使用Makefile文件的另一个关键字"all","all"的意思大家都知道是全部的含义,所以在这里就是让make能够同时执行全部的目标文件,并且目标文件为test和today,如下图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

关于本章知识点如果有不足或者遗漏,欢迎大家指正,谢谢!!!

请添加图片描述

请添加图片描述

相关文章:

Linux开发环境配置(下)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…...

系统开发常用命令合集

本文还会持续更新,大家可以点赞收藏~ ifconfig ifconfigwlan0表示无线网络接口 eth0表示以太网接口(有线) HWaddr是接口的物理地址(MAC地址) inet addr是接口的IPv4地址 Bcast是广播地址,Mask是子网掩码 …...

Termius工具在MAC的使用出现的问题:

Termius工具在MAC的使用出现的问题: 在使用SFTP时,出现不了本地的文件的位置 解决方案: 在Apple store下载的使用不了LOCAL SFTP, 需要在网页上进行下载才可以: 官网下载地址:https://termius.com/down…...

浅析Android中View的绘制流程

前言 在《浅析Android中View的测量布局流程》中分析了VSYNC信号到达App进程之后开启的View布局过程,经过对整个View树进行遍历进行测量和布局,最终确定View的大小以及在屏幕中所处的位置。但是如果用户想在屏幕上看到View的内容还需要经过绘制来生成图形…...

pikachu靶场- 文件上传unsafe upfileupload

pikachu靶场- unsafe upfileupload 概述client checkMIME typegetimagesize() 概述 不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断…...

java中this的内存原理是?

在Java中,this关键字是一个特殊的引用,指向当前对象的实例。它在以下几个方面发挥重要作用: 指向当前对象:this可以用来访问当前对象的属性和方法,尤其在参数命名与实例变量重名时,用于区分。 构造函数&a…...

Matlab 车牌识别技术

1.1设计内容及要求: 课题研究的主要内容是对数码相机拍摄的车牌,进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发,涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图1-1所示。 图1-1系统总…...

CUDA-求最大值最小值atomicMaxatomicMin

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 atomicMax和 atomicMin是 CUDA 中的原子操作,用于在并行计算中安全地更新共享变量的最大值和最小值。它们确…...

新的Midjourney就是一个增强版的Photoshop,你现在可以轻松的用它换衣服、换发型了

好久没有聊 Midjourney 了,昨晚他们发布了一项引人注目的新功能:AI 图像编辑,一个基于网页的加强版的 Photoshop 呼之欲出,让我大为震撼,也让用户们赞叹不已。 基于现有图像进行参考,进而生成新的图片&…...

Linux系统安装软件的4种方式【源码配置编译安装、yum安装、rpm包安装、二进制软件包安装(.rpm/.tar.gz/.tgz/.bz2)】

一.源码安装 linux安装软件采用源码安装灵活自由,适用于不同的平台,维护也十分方便。 (一)源码安装流程  源码的安装一般由3个步骤组成: 1.配置(configure) Configure是一个可执行脚本…...

基于Spring Boot的洪涝灾害应急信息管理系统设计与实现

摘要 近年来,全球气候变化加剧,洪涝灾害频发,给各国的经济发展和人民生活带来了巨大的威胁。为了提高洪涝灾害的应急响应能力,开发高效的应急信息管理系统变得至关重要。本文基于Spring Boot框架,设计并实现了一个洪涝…...

912.排序数组(桶排序)

目录 题目解法 题目 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题&#xff0c;时间复杂度为 O(nlog(n))&#xff0c;并且空间复杂度尽可能小。 解法 class Solution { public:vector<int> sortArray(vect…...

IPC 进程间通信 消息队列

操作系统内核中采用一个链式队列管理消息,每个节点就对应一个消息&#xff1a; 操作系统规定了单个消息的数据长度不能超过8k(8192个字节)&#xff0c;一个消息队列的表长(节点数)最多不超过256个 利用消息队列进行通信的特点&#xff1a; 1. 全双工&#xff1a;任何参与通信的…...

opencv 图像翻转- python 实现

在做图像数据增强时会经常用到图像翻转操作 flip。 具体代码实现如下&#xff1a; #-*-coding:utf-8-*- # date:2021-03 # Author: DataBall - XIAN # Function: 图像翻转import cv2 # 导入OpenCV库path test.jpgimg cv2.imread(path)# 读取图片 cv2.namedWindow(image,1) …...

使用DolphinScheduler接口实现批量导入工作流并上线

使用DS接口实现批量导入工作量并上线脚本 前面实现了批量生成DS的任务&#xff0c;当导入时发现只能逐个导入&#xff0c;因此通过接口实现会更方便。 DS接口文档 DS是有接口文档的地址是 http://IP:12345/dolphinscheduler/swagger-ui/index.html?languagezh_CN&lang…...

pycharm导出环境安装包列表

pycharm导出环境安装包列表 一、导出安装包列表二、安装requirements.txt三、列表显示已安装的包四、显示特定包的信息 一、导出安装包列表 pip freeze > requirements.txt二、安装requirements.txt pip install -r requirements.txt三、列表显示已安装的包 pip list四、…...

分体式智能网关在现代电力物联网中的优势有哪些?

随着电力系统的不断数字化和智能化&#xff0c;电力物联网已经成为现代电力行业发展的重要方向。电力物联网通过各种智能设备和传感器实现电力系统的监测、数据采集和分析&#xff0c;从而优化电力资源配置&#xff0c;提高电网的安全性和稳定性。在这个背景下&#xff0c;&quo…...

第14篇:下一代网络与新兴技术

目录 引言 14.1 下一代网络&#xff08;NGN&#xff09;的定义与特点 14.2 IPv6协议的改进与未来应用 14.3 软件定义网络&#xff08;SDN&#xff09; 14.4 网络功能虚拟化&#xff08;NFV&#xff09; 14.5 量子通信网络 14.6 软件定义广域网&#xff08;SD-WAN&#x…...

物联网数据采集网关详细介绍-天拓四方

一、物联网数据采集网关的概述 物联网数据采集网关&#xff0c;简称数据采集网关&#xff0c;是物联网系统中的重要组成部分&#xff0c;位于物联网设备和云端平台之间。其主要职责是实现数据的采集、汇聚、转换、传输等功能&#xff0c;确保来自不同物联网设备的数据能够统一…...

2024软考网络工程师笔记 - 第10章.组网技术

文章目录 交换机基础1️⃣交换机分类2️⃣其他分类方式3️⃣级联和堆叠4️⃣堆叠优劣势5️⃣交换机性能参数 &#x1f551;路由器基础1️⃣路由器接口2️⃣交换机路由器管理方式2️⃣交换机路由器管理方式 交换机基础 1️⃣交换机分类 1.根据交换方式分 存储转发式交换(Store…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...