【Linux】深入Linux:GCC/G++编译器实用指南
Linux | 相关知识点 | 可以通过点击 | 以下链接进行学习 | 一起加油! |
---|---|---|---|---|
初识指令 | 指令进阶 | 权限管理 | yum包管理与vim编辑器 |
在Linux系统中,理解和掌握GCC/G++编译器是开发者不可或缺的技能之一。本文将深入探讨它们的工作原理和实际运用,帮助读者更好地利用这些强大的开源工具进行软件开发。
文章目录
- 一、Linux编译器-gcc/g++使用
- 二、gcc编译可执行程序具体过程
- 2.1 预处理阶段
- 2.1.1 条件编译
- 2.2 编译阶段
- 2.3 汇编阶段
- 2.4 链接阶段
- 三、函数库(动态库与静态库)
- 四、图示理解动动态与静态库及其对应链接
- 五、动态库与动态链接
- 六、静态库与静态链接
- 6.1 静态存在空间浪费问题
- 6.2 生成静态链接的可执行文件
一、Linux编译器-gcc/g++使用
从普通源文件形成可执行程序文件,需要经历四个阶段:预处理(进行宏替换),编译(生成汇编指令),汇编(生成机器可识别代码),链接(生成可执行文件或库文件)
在Linux下,我们可以通过使用gcc/g++对普通源文件进行以上四个步骤处理,形成可执行程序。gcc是专门来编辑C语言代码,g++可以用来编辑C语言和C++语言的代码,g++底层是通过gcc实现。
在使用方面上,gcc和g++相差不大。在这篇文章中将编辑C语言代码使用gcc进行编译工作。接下来,进行相关知识的讲解。
【使用示例】
当使用编译器编译源文件会生成可执行程序,该可执行文件默认取名为a.out,当然我们可以使用-o 选项对目标文件重命名,但是确保需要形成一个可执行程序,该目标文件后缀需要符合可执行文件的后缀。
在使用gcc/gcc进行代码编译时,还需要注意当前编译器版本是否支持相关特性。如果由于编译器版本过低,会导致代码无法编译成功。对此我们在网上搜索安装最新gcc/g++指令或者在使用过程中添加选项gcc test.c -o my.exe -std=c99
及g++ test.cpp -o my.exe -std=c++11
。
虽然Linux不考虑文件后缀,但是不意味着Linux开发工具不考虑文件后缀。我们需要知道g++底层还是gcc,g++可以编译C/C++代码,但是gcc只能编译C语言代码,gcc不认识C++这些流,大部分是编译错误。
二、gcc编译可执行程序具体过程
使用gcc可以直接帮我们形成可执行程序,今天我们想看下从源文件到可执行程序每一个步骤。这里需要使用到一些gcc指令,能够使得他在每个阶段停下来并且能让我们看见中间的编译结果。
2.1 预处理阶段
- 指令:
gcc -E test.c -o test.i
- 在预处理阶段,会该文件进行宏替换,去注释,头文件展开,条件编译等操作。
- 预处理指令是以#号开头的代码行。
- 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程
- 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序
2.1.1 条件编译
条件编译:通过指明的编译条件,实现对于代码的动态裁剪。
条件编译可以运用在某个软件的社区版和专业版。社区版是专业版子集,如果社区版出现程序bug会影响到专业版,那么需要维护两份代码,但是可以通过条件编译,去动态的裁剪,这里只需要维护一份代码就可以了。
【具体示例】
【配合-D选项,命令行宏定义】
通过-D选项命令行宏定义,编译器可以直接动态的直接向源代码添加宏。使用命令式的宏,可以进行更加方便裁剪,根本不需要修改源代码,实现动态剪切功能。
在整个软件是某个功能的函数,如果想添加某个函数,在对应的代码块里面添加对应的功能就行了。
2.2 编译阶段
- 指令:
gcc -S test.i -p test.o
- 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言
- 用户可以使用“-S”选项来进行查看。该选项只进行编译而不进行汇编,生成汇编代码,当编译C语言翻译完毕成为汇编语言就停下来
- 这里被处理文件可以是该阶段以上的文件,无非是重新走一步流程。
2.3 汇编阶段
- 指令:
gcc -c test -o test.obj
- 通过汇编阶段会形成目标文件,全称为可重定位目标文件。这种文件不能直接执行,需要形成可执行程序exe文件
- 由于该文件是并不是一个可执行文件,而是二进制目标文件,属于临时文件是不能被直接执行的。
- 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码
2.4 链接阶段
- 指令:
gcc test.o -o my.exe
在实际使用上,对于上面源文件通过gcc具体编译可执行程序流程,我们不需要去细致的编写,直接gcc直接形成可执行程序即可。以上需要观察可执行程序形成过程中的选项,可以根据键盘上Esc
记忆。
三、函数库(动态库与静态库)
函数库一般分为:静态库和动态库两种
我们C程序中,并没有定义printf
的函数实现,且在预编译中包含的stdio.h
中也只有该函数的声明,而没有定义函数的实现。那么是在哪里实printf
函数的呢?
是由于系统把这些函数实现都被保存到名为libc.so.6
的库文件中,在没有特定指定时,gcc会到系统默认的搜索路径/use/lib
下进行查找,也就是链接到libc.so.6 库函数中去,这样就能实现函数printf
实现,这里是链接的作用
- 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为
.a
- 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为
.so
,如前面所述的libc.so.6
就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。gcchello.o –o hello
- gcc默认生成的二进制程序,是动态链接的,这点可以通过
file
命令验证
我们可以通过lld指令后面跟着可执行程序,能查看该可执行程序所依赖的库,一般默认是动态链接,所以展示链接到动态库,其中这些都是打包好的纯二进制文件。
链接过程实际上就是把我们写的源代码和库中方法链接形成一个可执行程序,如果需要使用某个办法,那么可以直接调用别人写好在库中好办法。
【不同平台下库的后缀】
【在Linux下】:
- 动态库:.so
- 静态库:.a
【在Windows下】:
- 动态:.dli
- 静态:.lib
【得到库的真实名字】
比如:libc.so.6,我们将前缀和后缀删除,就得到c,说明了libc.so.6是C标准库。虽然gcc/g++没有头文件作为连接,但是它们默认是可以找到的。
四、图示理解动动态与静态库及其对应链接
由于存在动态库和静态库,在连接这两种库也存在对应的两种连接方式:动态连接与静态连接
【小故事】
你是个新生(源文件),在开学的时候问学长(编译器),我们学校(内存)附近是否有网吧(动态库)。学长(编译器)告诉了你目标库的地址(动态链接)。这几天你(源文件)有事情可以根据学长告诉你的地址(动态链接)去网吧(动态库)找学习资料(方法),你室友(多用户)一听,很开心也按照目标地址(动态链接)也去网吧(动态库)找学习资料(方法)。突然有一天,接到举报,派出所将这网吧(动态库缺失)查封了,这也意味着网吧里面学习资料就找不到了,学长跟你说的地址也不能去了(动态链接失效)。共享动态库,但是一旦动态库缺少,所有的动态链接,库中程序,都会无法运行有一天,你跟你爸说,爸我想在学校(内存)玩电脑找下学习资料吗。由于你老爸跟校长认识,你学习成绩也是不错的。你爸就找到那家网吧的老板(静态库),买了一台机子(拷贝动态库方法到可执行程序中)给你安在宿舍里面。你宿舍一看,也跟自家老爸一说,你们宿舍基本人手一台电脑,网吧倒闭也不关你们的事情了。在编译时候,把库中方法,拷贝到自己可执行程序中,通过静态链接访问(起床就可以玩电脑),不关心任何库。
五、动态库与动态链接
如果采用动态链接访问动态库,意味着,在内存当中未来加载动态库,只需在内存中加载一份动态库,所用程序如果有需要,跟函数调用一般使用,相较于静态库最大优点节省空间
六、静态库与静态链接
如果采用静态链接访问静态库,意味着,静态链接会默认把库中代码拷贝到程序中,也是说静态链接形成的可执行程序不依赖任何的库。
6.1 静态存在空间浪费问题
比如需要实现printf方法,静态链接将在每个程序中将printf方法拷贝一份,同时需要加载内存当中给可执行程序拷贝一份,会导致数据冗余情况发生。
对于静态链接,还存在个别空间浪费,这不仅仅体现的可执行程,还有占磁盘空间,它未来还要加载到内存中,也比较浪费内存空间。
6.2 生成静态链接的可执行文件
【问题】:该程序依赖x库,你的机器上有x库,你的程序可以跑,但是单纯把你的程序拷贝到另一台机器上,另一台机器没有x库,就没办法跑起来了。
这个时候需要一个非常好的跨平台性的可执行问下,将你的程序静态链接,你的可执行程序二进制代码直接部署到其他机器上,我们的程序不依赖任何的动态库,不用做更多的环境检测,直接安装就行了。
【-static选项】:
生成静态链接的可执行程序选项-static
。其中gcc -o mytest-static -static
该选项的作用就是,编译时候需要链接相关静态库和可执行程序。
生成一个静态链接的可执行文件:所有所需的库都被嵌入到该文件中,不依赖外部的共享库(动态链接库,如 .so
文件)。这样,即使在目标系统上缺少这些共享库,可执行文件仍然可以运行。
【默认没有安装静态库】
如果没有安装静态库,使用-static
选项,无法链接成功。
C语言和C++动态库都是有的,静态库是没有安装的,默认态度就是使用动态链接,如何进行安装呢?
百度一下 -C / C++静态库
以上就是本篇文章的所有内容,在此感谢大家的观看!这里是店小二呀Linux笔记,希望对你在学习Linux语言旅途中有所帮助!
相关文章:
【Linux】深入Linux:GCC/G++编译器实用指南
Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器 在Linux系统中,理解和掌握GCC/G编译器是开发者不可或缺的技能之一。本文将深入探讨它们的工作原理和实际运用,帮助读者更好地利用这些强…...
【未来编程:AI如何通过合成复用原则优化设计】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言合成复用原则含义 继承复用含义UML图实现代码运行结果及分析优缺点 合成复用(我有这…...
【Rust自学】5.3. struct的方法(Method)
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 5.3.1. 什么是方法(Method) 方法和函数类似,也是用fn关键字进行声明,方法也有名称,也有参数ÿ…...
单片机 STM32入门
一、什么是单片机 单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器(包括RAM和ROM)、输入/输出接口等集成在一个芯片上。单片机通常用于嵌入式系统,能够执行特定的…...
OneCode:开启高效编程新时代——企业定制出码手册
一、概述 OneCode 的 DSM(领域特定建模)出码模块是一个强大的工具,它支持多种建模方式,并具有强大的模型转换与集成能力,能够提升开发效率和代码质量,同时方便团队协作与知识传承,还具备方便的仿…...
学python还是学java?哪个相对来说比较容易上手?
在比较Python和Java哪个更容易上手时,可以从多个维度进行分析,包括语法简洁性、学习资源、应用领域、学习曲线等。 一、语法简洁性 Python:Python的语法简洁明了,更接近自然语言,易于理解和记忆。它使用缩进来表示代…...
C语言项目 天天酷跑(上篇)
前言 这里讲述这个天天酷跑是怎么实现的,我会在天天酷跑的下篇添加源代码,这里会讲述天天酷跑这个项目是如何实现的每一个思路,都是作者自己学习于别人的代码而创作的项目和思路,这个代码和网上有些许不一样,因为掺杂了…...
Windows 11 安装 Dify 完整指南 非docker环境
# Windows 11 安装 Dify 完整指南## 前置要求- Python 3.11 - Node.js 18 - PostgreSQL 14 - Redis for Windows - Git - Ollama (可选,用于本地模型)## 详细安装步骤### 1. 安装必要软件1. **Python 3.11**- 从 https://www.python.org/downloads/release/python-…...
MySQL变量
文章目录 MySQL变量系统变量查看系统变量设置系统变量 自定义变量用户变量局部变量 MySQL变量 MySQL变量分为系统变量和自定义变量 系统变量 系统变量有全局变量和会话变量 查看系统变量 #查看全局系统变量 show global variables; #根据条件查询全局系统变量 show global …...
Ubuntu离线安装Docker容器
前言 使用安装的工具snap安装在沙箱中,并且该沙箱之外的权限有限。docker无法从其隔离的沙箱环境访问外部文件系统。 目录 前言准备环境卸载已安装的Docker环境快照安装的Dockerapt删除Docker 安装docker-compose下载执行文件将文件移到 /usr/local/bin赋予执行权限…...
ensp 关于acl的运用和讲解
ACL(Access Control List,访问控制列表)是一种常用于网络设备(如路由器、交换机)上的安全机制,用于控制数据包的流动与访问权限。ACL 可以指定哪些数据包允许进入或离开某个网络接口,基于不同的…...
Linux(Centos 7.6)yum源配置
yum是rpm包的管理工具,可以自动安装、升级、删除软件包的功能,可以自动解决软件包之间的依赖关系,使得用户更方便软件包的管理。要使用yum必须要进行配置,个人将其分为三类,本地yum源、局域网yum源、第三方yum源&#…...
[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同
[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识,在正式开始说WASAPI之前,我想先说一说Qt的Multiple Media,为什么呢?因为Qt的MultipleMedia实际上是WASAPI的一层封装,它在是线…...
什么是MVCC?
MVCC(多版本并发控制,Multi-Version Concurrency Control)是一种用于数据库管理系统中的并发控制的技术。它允许多个事务同时对同一数据进行读取和修改,而不会相互干扰,从而提高了数据库的并发性能。以下是对MVCC的详细…...
C/C++基础错题归纳
文章目录 第1天1.下面程序段的运行结果是:答案知识补充 2.当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少?答案知识补充 3.下面程序输出是什么?答案其他讲解 第1天 1.下面程序段的运行结果是: char C[5]{‘a’,’b’…...
Nginx 常用安全头
Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头,可以抵御常见的安全威胁(如 XSS、点击劫持、MIME 类型嗅探等),增强用户隐私保护和传输安全性。 常见的 HTTP 安全头及其作用 1. Content-Se…...
消息队列(一)消息队列的工作流程
什么是消息队列 首先,代入一个场景,我现在做一个多系统的集成,分别有系统A、B、C、D四个系统,A系统因为使用产生了业务数据,B、C、D需要使用这些数据做相关的业务处理和运算,最基本的做法就是通过接口通信…...
LeetCode 2605 从两个数字数组里生成最小数字
探寻两个数组数位关联下的最小数字问题 题目描述 给定两个只包含 1 到 9 之间数字的数组 nums1 和 nums2,并且每个数组中的元素都是互不相同的。我们需要返回最小的数字,要求这个数字满足两个数组都至少包含这个数字的某个数位。例如,若 nu…...
AI新书推荐:深度学习和大模型原理与实践(清华社)
本书简介 在这个信息爆炸、技术革新日新月异的时代,深度学习作为人工智能领域的重要分支,正引领着新一轮的技术革命。《深度学习和大模型原理与实践》一书,旨在为读者提供深度学习及其大模型技术的全面知识和实践应用的指南。 本书特色在于…...
32单片机串口数据接收、空闲IDLE中断详解
一、前提说明 一开始写单片机程序的时候不太清楚空闲中断这个东西,每次用串口接收数据,都要再开一个定时器,在定时器内进行倒计时,每次接收数据就重置计时时间,计时结束就触发中断,再判断所有接收的数据&am…...
WebRtc webrtc-streamer部署
文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...
shiro注入filter内存马(绕过长度限制)
shiro环境 https://github.com/yyhuni/shiroMemshell(实验环境) 这里用的 Client_memshell.java package com.example.demo;import javassist.ClassPool; import javassist.CtClass; import org.apache.shiro.crypto.AesCipherService; import org.ap…...
Springboot + vue3 实现大文件上传方案:秒传、断点续传、分片上传、前端异步上传
参考:https://juejin.cn/post/6870837414852886542#heading-9 一般计算大文件的md5都是前端来做,因为如果后端来做,那得等到上传成功后才能计算md5值,并且读取的时间也很长。 为了解决文件大传输慢的问题,前端可以通…...
渗透Vulnhub-DC-9靶机
本篇文章旨在为网络安全渗透测试行业靶机教学。通过阅读本文,读者将能够对渗透Vulnhub系列DC-6靶机有定的了解 一、信息收集阶段 DC-9靶场信息: DC-9靶场介绍: https://www.vulnhub.com/entry/dc-9,412/ DC-9靶场下载: https://download.vu…...
springboot477基于vue技术的农业设备租赁系统(论文+源码)_kaic
摘 要 使用旧方法对农业设备租赁系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在农业设备租赁系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的农…...
CentOS常见命令
CentOS(Community ENTerprise Operating System)基于Red Hat Enterprise Linux(RHEL)源代码开发,是常用的Linux发行版之一。在CentOS系统中,有许多命令用于管理和操作系统,以下是一些CentOS系统…...
oracle 设置归档日志存放路径
oracle 设置归档日志存放路径 1、创建新目录 mkdir /archive chown -R oracle:oinstall /archive 注:条件允许的话,/archive 目录应独立挂载。1、便于监控目录使用率;2、避免和其它文件混淆,便于管理。 2、设置归档日志存放路…...
机器学习1-简单神经网络
相比传统的机器学习算法,深度学习做出了哪些改进呢?其实两者在理论结构上是一致的,即:模型假设、评价函数和优化算法,其根本差别在于假设的复杂度 构建简单神经网络(未训练): # 封装…...
C++的侵入式链表
非侵入式链表 非侵入式链表是一种链表数据结构,其中每个元素(节点)并不需要自己包含指向前后节点的指针。链表的结构和节点的存储是分开的,链表容器会单独管理这些指针。 常见的非侵入式链表节点可以由以下所示,即&a…...
MFC案例:图片文件转图标(ico)格式
本案例程序目的是将一般图像文件转换成图标格式(ico)。实现起来不是很复杂,这里为了介绍MFC的具体使用方法,在程序界面上分成几个功能块,包括:打开图像文件、选择ICON大小、转换、预览、保存等。相关具体步骤如下: 一、…...
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
文章目录 一、软件下载安装1、Unity官网2、下载Unity Hub 二、修改Unity Hub配置1、设置Unity Hub中文语言2、修改默认存储目录 三、安装unity编辑器1、点击安装编辑器2、版本选择3、关于版本号4、安装模块选择5、等待下载完成自动安装即可6、追加unity和模块 四、许可证管理专…...
东子生物完成A轮战略融资,数字商品交易全新升级为数商时代
2024年11月23日,东子生物数字时代正式上线,标志着公司全面迈入“数商时代”,作为国内领先的生物科技企业,东子生物在数字化浪潮中精准布局,以创新科技推动产业升级,以全新的思维引领健康产业,兼…...
数据结构经典算法总复习(上卷)
第一章:数据结构导论 无重要考点,仅需了解时间复杂度。 第二章:线性表 1.获得线性表第i个元素 void GetElem_sq(SqList L, int i, ElemType &e) {if (i<1 || i>L.length) ErrorMsg("Invalid i value"); //注意错误监…...
电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?
电脑使用CDR时弹出“计算机丢失mfc140u.dll”错误:原因与解决方案 在日常电脑使用中,我们时常会遇到各种系统报错和文件丢失问题。特别是当我们使用某些特定软件,如CorelDRAW(简称CDR)时,可能会遇到“计算…...
oracle使用imp命令导入dmp文件
需求: 增量导入 tbl_servicelegalclause 表数据(dmp格式)。 导入思路:使用 dba 创建一个 临时库,先将 tbl_servicelegalclause.dmp(增量的数据) 文件导入到 临时库,然后确认临时库数…...
电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决
电脑蓝屏是让许多用户头疼的问题,其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法,能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏,如金手指氧化、芯片…...
Logback日志框架中的继承机制详解
在Logback框架中,logger的继承机制是基于层级结构(hierarchical context)工作的。每个logger都被分配一个名称,这个名称可以看作是一个路径或目录结构,从而形成了一个逻辑上的树状结构。这种结构使得日志记录具有很强的…...
[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算
在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…...
node.js的异步工作之---回调函数与回调地狱
回调函数:在 Node.js 中,很多 API 都是异步的,通常通过回调函数来处理操作完成后的结果。这种回调模式虽然非常高效,但会导致代码逐渐变得难以维护,尤其是当有多个异步操作嵌套时(即回调地狱)。…...
tcp 的三次握手与四次挥手
问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…...
《三角洲行动》游戏运行时提示“缺失kernel32.dll”:问题解析与解决方案
《三角洲行动》游戏运行时提示“缺失kernel32.dll”:问题解析与解决方案 作为软件开发领域的一名从业者,我深知电脑游戏运行过程中可能遇到的各种挑战,尤其是文件丢失、文件损坏以及系统报错等问题。今天,我将以经典游戏《三角洲…...
Android——自定义按钮button
项目中经常高频使用按钮,要求:可设置颜色,有圆角且有按下效果的Button 一、自定义按钮button button的代码为 package com.fslihua.clickeffectimport android.annotation.SuppressLint import android.content.Context import android.gra…...
Pandas基础学习(1)
之前看的pandas的教材和课程里,内容参差不齐,实际使用很少的方法的内容有点多,导致很乱而且记不住那么多,这个帖子尽量用最少的文字,最精炼的语言来总结比较实用的方法,内容主要来源于《利用python进行数据…...
20241224在Ubuntu20.04.6下给X99平台上的M6000显卡安装驱动程序
20241224在Ubuntu20.04.6下给X99平台上的M6000显卡安装驱动程序 2024/12/24 16:18 下载驱动程序: https://www.nvidia.cn/drivers/lookup/ https://www.nvidia.cn/drivers/results/ https://www.nvidia.cn/drivers/details/237923/ https://www.nvidia.cn/drivers/l…...
批量多线程给TXT文档插入相关腾讯AI【高质量无水印无版权】原创图片
给蜘蛛访问的网站文章插入相关图片,可以带来以下好处: 1、提升用户体验:图片能够直观地展示文章内容,帮助用户更好地理解和消化信息。对于阅读者来说,图文并茂的内容往往更具吸引力,也能提高他们的阅读…...
保护模式基本概念
CPU 架构 RISC(Reduced Instruction Set Computer) 中文即"精简指令集计算机”。RISC构架的指令格式和长度通常是固定的(如ARM是32位的指令)、且指令和寻址方式少而简单、大多数指令在一个周期内就可以执行完毕 CISC&…...
mysql 查询优化之字段建立全文索引
最近在接手一些老项目时发现表设计存在问题导致查询较慢 例如一张旧表的设计: 模糊匹配某个关键字时,需要十几秒左右,而且表的数据量不多 都知道mysql8.0版本InnoDB引擎都支持全文索引了,因此可以在content建立全文索引,但全文索引对中文支持并不完善…...
redis和mysql的区别
Redis是一种非关系型数据库(NoSQL),将数据存储在缓存中,这虽然提高了运行效率,但是保存时间却很短。将数据存储在内存中,因此读写速度非常快,特别适合用于需要高速访问的场景,如缓存…...
【Laravel】接口的访问频率限制器
Laravel 接口的访问频率,你可以在 Laravel 中使用速率限制器(Rate Limiter)。以下是一个详细的步骤,展示如何为这个特定的 API 路由设置速率限制: 1. 配置 RouteServiceProvider 首先,确保在 App\Provide…...
LabVIEW水泵性能测试系统
在现代工业应用中,水泵作为一种广泛使用的流体输送设备,其性能的可靠性对整个生产系统的稳定运行至关重要。通过LabVIEW软件配合专业硬件设备,设计了一套水泵性能测试系统,实现对各类水泵的综合性能测试与分析,提升水泵…...