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

【Linux】gcc/g++的使用

图片名称
🎉博主首页: 有趣的中国人

🎉专栏首页: Linux

🎉其它专栏: C++初阶 | C++进阶 | 初阶数据结构

在这里插入图片描述

小伙伴们大家好,本片文章将会讲解Linux中gcc/g++使用的相关内容。


如果看到最后您觉得这篇文章写得不错,有所收获,麻烦点赞👍、收藏🌟、留下评论📝。您的支持是我最大的动力,让我们一起努力,共同成长!

文章目录

  • 1. 什么是gcc/g++
  • 2. 编译运行gcc/g++的语法
  • 3. gcc/g++编译的四个步骤
    • 3.1 ==🔎<font color = blue size = 4><b>预处理🔍==
    • 3.2 ==🔎<font color = blue size = 4><b>编译🔍==
    • 3.3 ==🔎<font color = blue size = 4><b>汇编🔍==
    • 3.4 ==🔎<font color = blue size = 4><b>链接🔍==
    • 3.5 ==<font color = blue size = 4><b>🔎编译器的自举过程🔍==
  • 4. 详解链接
    • 4.1 ==🔎<font color = blue size = 4><b>动态库&动态链接🔍==
    • 4.2 ==🔎<font color = blue size = 4><b>静态库&静态链接🔍==
    • 4.2 ==🔎<font color = blue size = 4><b>动态库动态链接&静态库静态链接的优缺点🔍==



1. 什么是gcc/g++


GCC(GNU Compiler Collection)是一套由GNU计划开发的编译器集合,它是一种开源的编译器套件,用于编译和运行C、C++、Fortran、Ada、以及其他一些编程语言的程序。其中,g++是GCC中专门用于编译C++程序的工具

由于其开放源代码的特性,GCC已经成为许多操作系统和平台上的标准编译器,例如Linux、GNU Hurd、Mac OS X等

g++是GCC中用于编译C++源代码的前端工具。它支持标准的C++语法和语言特性,并提供了丰富的编译选项和优化功能,以便用户根据需要进行配置和调整。使用g++,开发者可以将C++源代码编译成可执行程序或者库文件,从而在各种平台上运行他们的程序。


🔎关于C、C++的后缀🔍

在Linux系统中C语言正常以.c为后缀。

C++一般有三个后缀:

1. filename.cpp

2. filename.cc

3. filename.cxx

🔎安装gcc/g++🔍

输入命令安装gcc:

# 我这里已经下载过了
[dsj@alicloud-dsj ~]$ sudo yum install -y gcc # 输入此行命令即可下载
[sudo] password for dsj:                      # 这里要sudo提权,如果是root就不需要
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
base                                                                                                                                | 3.6 kB  00:00:00     
epel                                                                                                                                | 4.7 kB  00:00:00     
extras                                                                                                                              | 2.9 kB  00:00:00     
updates                                                                                                                             | 2.9 kB  00:00:00     
(1/3): epel/x86_64/updateinfo                                                                                                       | 1.0 MB  00:00:00     
(2/3): epel/x86_64/primary_db                                                                                                       | 7.0 MB  00:00:00     
(3/3): updates/7/x86_64/primary_db                                                                                                  |  27 MB  00:00:00     
Package gcc-4.8.5-44.el7.x86_64 already installed and latest version

输入命令安装g++:

# 我这里已经下载过了
[dsj@alicloud-dsj ~]$ sudo yum install gcc-c++  # 输入此行命令即可下载g++
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package gcc-c++-4.8.5-44.el7.x86_64 already installed and latest version
Nothing to do

查看gcc/g++版本:

[dsj@alicloud-dsj ~]$ gcc --version #输入此行命令查看gcc版本
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.[dsj@alicloud-dsj ~]$ g++ --version #输入此行命令查看g++版本
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2. 编译运行gcc/g++的语法


🔎编译gcc的语法🔍

先确保我们目录中存在C文件,然后输入以下命令进行编译,生成可执行文件:

gcc [要编译的文件] -o[要生成的文件名]
or
gcc -o[要生成的文件名] [要编译的文件]

例如:

[dsj@alicloud-dsj lesson10]$ gcc test.c -o my.exe -std=c99 #输入-std=c99说明以c99标准进行编译
[dsj@alicloud-dsj lesson10]$ ll
total 16
-rwxrwxr-x 1 dsj dsj 8408 May  8 15:42 my.exe
-rw-rw-r-- 1 dsj dsj 3087 May  8 10:39 test.c

在这里插入图片描述

🔎编译g++的语法🔍

先确保我们目录中存在C++文件,然后输入以下命令进行编译,生成可执行文件:

g++ [要编译的文件] -o[要生成的文件名]
or
g++ -o[要生成的文件名] [要编译的文件]

例如:

[dsj@alicloud-dsj lesson10]$ g++ test.cc -o myc++.exe -std=c++11 #输入-std=c++11说明以c++11标准进行编译
[dsj@alicloud-dsj lesson10]$ ll
total 32
-rwxrwxr-x 1 dsj dsj 8976 May  8 15:52 myc++.exe
-rwxrwxr-x 1 dsj dsj 8408 May  8 15:42 my.exe
-rw-rw-r-- 1 dsj dsj 3087 May  8 10:39 test.c
-rw-rw-r-- 1 dsj dsj  141 May  8 15:52 test.cc

在这里插入图片描述


🔎运行可执行文件🔍

输入命令./[可执行文件名]即可运行。

在这里插入图片描述


3. gcc/g++编译的四个步骤


使用 GCC 或者 g++ 编译 C 或者 C++ 程序通常包括以下四个步骤:

1. 预处理

2. 编译

3. 汇编

4. 链接


3.1 🔎预处理🔍


预处理阶段编译器通常会有以下步骤:

1. 头文件的展开

2. 宏替换

3. 去注释

4. 条件编译

我们可以输入以下命令让.c文件停留在预处理阶段进行查看:

[dsj@alicloud-dsj lesson10]$ gcc -E test.c -o test.i #输入这个命令
[dsj@alicloud-dsj lesson10]$ ll
total 52
-rwxrwxr-x 1 dsj dsj  8976 May  8 15:52 myc++.exe
-rwxrwxr-x 1 dsj dsj  8408 May  8 15:42 my.exe
-rw-rw-r-- 1 dsj dsj  3087 May  8 10:39 test.c
-rw-rw-r-- 1 dsj dsj   141 May  8 15:52 test.cc
-rw-rw-r-- 1 dsj dsj 17250 May  8 16:15 test.i #生成这个文件,停留在预处理阶段
[dsj@alicloud-dsj lesson10]$ vim test.i #输入此行命令查看test.i文件

查看此文件:

在这里插入图片描述


我们发现虽然源文件只有100多行,但是.i这个文件就有800多行,这是因为头文件被展开了,并且注释也被去除了,宏也被替换了。


💻条件编译

我们先用条件编译写一下如下的代码:

#include <stdio.h>int main()
{
#ifdef V1printf("功能1\n");#elif V2printf("功能1\n");printf("功能2\n");printf("功能3\n");
#elseprintf("功能1\n");printf("功能2\n");printf("功能3\n");printf("功能4\n");printf("功能5\n");printf("功能6\n");
#endifreturn 0;
}

因为这里并没有定义V1, V2,所以会执行else的内容:

在这里插入图片描述

我们可以在编译的时候输入以下指令就可以给源文件增加宏定义:

[dsj@alicloud-dsj test]$ gcc -D V1=1 test.c -o test.exe

在这里插入图片描述

3.2 🔎编译🔍


编译阶段编译器通常会有以下步骤:

1. 生成汇编代码

2. 检查语法(词法分析、语法分析、语义分析等)

我们可以输入以下命令让.i文件停留在编译阶段进行查看:

[dsj@alicloud-dsj lesson10]$ gcc -S test.i -o test.s -std=c99

在这里插入图片描述

vim查看此文件:

在这里插入图片描述

3.3 🔎汇编🔍


汇编阶段编译器主要会有以下步骤:

将汇编代码转换成机器可识别的二进制代码。


我们可以输入以下命令让`.s`文件停留在汇编阶段进行查看:
[dsj@alicloud-dsj lesson10]$ gcc -c test.s -o test.o

在这里插入图片描述

vim查看此文件:

在这里插入图片描述

emmmmm,发现是看不懂的二进制文件,没错,这是机器识别的文件,没打算给我们看懂。


3.4 🔎链接🔍


链接阶段编译器通常会有以下步骤:

链接阶段就是将汇编阶段已经生成的二进制文件和所需要的进行链接,最终生成可执行程序的过程。


我们可以输入以下命令让.o文件生成可执行程序:


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

3.5 🔎编译器的自举过程🔍


首先我们来思考一个问题:为什么在编译时必须要走这4个过程,不能直接到链接阶段生成可执行程序吗?要讲解这个问题我们先回溯一下历史:

回溯历史:

我们知道计算机最早的编程是通过那种打孔的小纸条来实现的,因为这样编程太过于复杂,随后又出现了汇编语言。

然而所有的计算机程序最终都需要被翻译成计算机能够理解的二进制形式才能执行,所以在汇编语言发行的时候肯定也解决了将汇编语言翻译成二进制形式的问题。

所以对于我们的C/C++语言,如果直接转换成二进制语言,实际上是可行的,但是实现起来难度太大,如果说运用前辈们的成果,先将C/C++翻译成汇编语言,在翻译成二进制语言,这样的难度肯定就会小很多,这就是为啥要经历编译、汇编等阶段的原因。

然而此时的问题又来了,第一个汇编语言程序是怎么被编译出来的呢?是依靠编译器吗?编译器又是哪款语言写的呢?

其实当汇编发行的时候,先用二进制语言写了一份汇编语言的编译器,然后就可以把汇编语言学的代码放到这个编译器中进行编译,因为编译器也是属于软件,所以我们也可以用汇编语言写一份汇编语言的编译器,再放到二进制语言写的汇编语言编译器中进行编译,就形成了汇编语言的编译器,这个过程就叫做编译器的自举。

下面是详细的解释:

编译器的自举是指用编程语言(例如汇编语言)编写一个编译器,然后使用该编译器来编译其自身的源代码。这个过程可以分为几个步骤:

  1. 编写第一个版本的编译器: 初始阶段,程序员会使用另一种已经存在的编程语言(通常是汇编语言或高级语言)来编写一个最基本的编译器。这个编译器可以将源代码(例如C语言)转换为目标机器的汇编语言或者机器码。
  2. 使用第一个编译器编译自身源代码: 一旦第一个版本的编译器完成,程序员会使用它来编译其自身的源代码。这意味着用该编译器编译的结果将是一个新版本的编译器。
  3. 重复此过程: 新版本的编译器可以更加完善和高效,程序员可以使用它来编译自身的源代码,生成更新的版本。这个过程可以一遍又一遍地重复,每一次迭代都会改进编译器的功能、性能和稳定性。

通过这种方式,编译器的自举实现了编译器的持续改进和演化。它也证明了编译器本身是一个软件程序,可以用其它编程语言来编写,而不仅仅局限于机器语言或者汇编语言。这个过程展示了计算机科学中有趣的自指特性。


4. 详解链接


刚才说过,链接实际上就是把汇编阶段生成的二进制目标文件和所需要的库文件相结合,形成可执行文件的过程。


那么问题来了,这个库是什么,它存在在那里,为什么就能找到呢?



我们接下来一一解答。

在我们的头文件中只是包含了一些内置类型函数的声明,例如下图的printf,那么具体的函数实现在哪里呢?

在这里插入图片描述

对于每一门语言,在被发行的时候都有自己的库函数,这里面存放这一些常用函数的具体实现(方法集),例如输入输出函数等,然后他会给出你一些头文件,这些头文件就相当于是这些库的说明书,供你使用。


并且在编译阶段编译器就会告诉你应该去哪个位置去找到对应的方法。


我们可以用一下命令看一下Linux下C所依赖的库是什么:


在这里插入图片描述

[dsj@alicloud-dsj lesson10]$ ldd test.exelinux-vdso.so.1 =>  (0x00007ffcfc7db000)libc.so.6 => /lib64/libc.so.6 (0x00007f6d9eb9d000)/lib64/ld-linux-x86-64.so.2 (0x00007f6d9ef6b000)
[dsj@alicloud-dsj lesson10]$ ls /lib64/libc.so.6 -l
lrwxrwxrwx 1 root root 12 Sep 19  2023 /lib64/libc.so.6 -> libc-2.17.so
[dsj@alicloud-dsj lesson10]$ file test.exe
test.exe: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=946a88d4c5e0c0a19483beb1d83eeb28686d5d4e, not stripped
[dsj@alicloud-dsj lesson10]$ 

4.1 🔎动态库&动态链接🔍


我们可以看到C所依赖的库是 /lib64/libc.so.6,这个库中存放的就是内置给你的函数的具体实现方法,但是是二进制的文件,可以看一下:

在这里插入图片描述


💻动态库

这个库是以.so的后缀,一般以这个为后缀的文件就叫做动态库。


💻动态链接

动态链接就是在程序运行时由操作系统的动态链接器动态地加载动态链接库文件,不会在编译时将库文件的代码和数据合并到可执行文件中。

可以用file看一下文件的具体类型:

在这里插入图片描述

说明这个可执行文件是动态链接的(共享库也就是动态库)。

4.2 🔎静态库&静态链接🔍


💻静态库

在Linux中,静态库通常以.a为后缀,但是一般情况下不会自带,要自己手动下载。

💻静态库的下载

sudo yum install -y glibc-static # C语言静态库
sudo yum install -y libstdc+±static # C++静态库

这样我们编译一个文件就可以以静态的形式进行编译:

[dsj@alicloud-dsj lesson10]$ gcc test.c -o static_test.exe -static -std=c99

在这里插入图片描述

💻静态链接

在静态链接的情况下,编译器会在编译阶段将所需的库函数的代码和数据直接合并到最终的可执行程序中,而不是在运行时动态加载和链接库文件。

这意味着可执行文件会变得更大,因为它包含了所有依赖的库的代码和数据,但同时也意味着程序在运行时不需要依赖外部的库文件,因为所有的代码和数据都已经包含在可执行文件中了。

在这里插入图片描述

4.2 🔎动态库动态链接&静态库静态链接的优缺点🔍


动态库&动态链接:
1. 因为Linux中的很多指令都要依赖此动态库,因此他不能丢失
2. 它相较于静态链接更节省资源空间
静态库&静态链接
1. 因为静态链接会在编译阶段把所有需要的函数全都加载到内存中,因此它不需要依赖其他东西,和库无关,跨平台性较强
2. 但是太费资源、空间。

相关文章:

【Linux】gcc/g++的使用

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中gcc/g使用的相关内容。 如果看到最后您觉得这篇文章写得不错…...

2024-5-3学习笔记 虚拟继承原理

目录 原理 总结 前面提到过&#xff0c;解决菱形继承产生的数据二义性问题和数据冗余&#xff0c;就需要用到虚拟继承&#xff0c;关于它是如何解决的&#xff0c;我们来一起研究。 class Person { public :string _name ; // 姓名 }; class Student : virtual public Perso…...

C语言什么是“野指针”?

一、问题 “野指针”是⼀个⽐较陌⽣的术语&#xff0c;那么它到底是什么呢&#xff1f; 二、解答 当程序⾥声明了⼀个指针⽽又没有给这个指针赋值&#xff0c;使其指向⼀个地址时&#xff0c;这样的指针就称为“野指针”。 “野指针”会随意地指向⼀个地址。当对这个指针进⾏操…...

LeetCode--所有质数、质数对

1.0 Q: 输出 100 以内所有质数 1.1 /* 第一层循环控制检查到哪个数* 第二层通过遍历除以每个比他小的数的方式,检查每个数是不是质数* 由于要遍历检查,设置一个标记,只要任意一次循环可以整除,我们就设置该标记为不是质数 */boolean isPrime true;for (int i 2; i < 100…...

JavaScript异步编程——05-回调函数

我们在前面的文章《JavaScript 基础&#xff1a;异步编程/单线程和异步》中讲过&#xff0c;Javascript 是⼀⻔单线程语⾔。早期我们解决异步场景时&#xff0c;⼤部分情况都是通过回调函数来进⾏。 &#xff08;如果你还不了解单线程和异步的概念&#xff0c;可以先去回顾上一…...

JAVA基础之jsp标准标签

jsp动作标签实现实例化一个实体类 <jsp:useBean id"标识符" class"java类名" scope"作用范围"> 传统的java方式实例化一个实体类 Users user new Users(); <%%> id: 对象名 * class:类 创建对象时,完全限定名(包名…...

VM16激活码以及连接centos7过慢的问题

一、激活码 任选一个&#xff0c;直到能用为止 ZF3R0-FHED2-M80TY-8QYGC-NPKYF YF390-0HF8P-M81RQ-2DXQE-M2UT6 ZF71R-DMX85-08DQY-8YMNC-PPHV8 FA1M0-89YE3-081TQ-AFNX9-NKUC0 二-连接centos7过慢的问题 先备份/etc/ssh/sshd_config,备份命令为 cp /etc/ssh/sshd_config /etc/…...

MySQL 迁移到 Oracle 需要注意的问题

MySQL /Oracle 常见问题 1. VARCHAR/VARCHAR2/NVARCHAR 差异&#xff1a; MySQL 的 VARCHAR 是以字符为单位计算的&#xff0c;Oracle 的 VARCHAR 是 以字节为单位计算的&#xff0c;所以对中文的存储 Oracle 是 MySQL 的 2 倍 (GBK)和 3 倍(UTF8) 2. NULL 差异 A. MySQL…...

【数字经济】上市公司供应链数字化数据(2000-2022)

数据来源&#xff1a; 时间跨度&#xff1a;2000-2022年 数据范围&#xff1a;各上市企业 数据指标&#xff1a; 样例数据&#xff1a; 参考文献&#xff1a;[1]刘海建,胡化广,张树山,等.供应链数字化的绿色创新效应[J].财经研究,2023,49(03):4-18. 下载链接&#xff1a;https:…...

通过AOP实现项目中业务服务降级功能

最近项目中需要增强系统的可靠性&#xff0c;比如某远程服务宕机或者网络抖动引起服务不可用&#xff0c;需要从本地或者其它地方获取业务数据&#xff0c;保证业务的连续稳定性等等。这里简单记录下业务实现&#xff0c;主要我们项目中调用远程接口失败时&#xff0c;需要从本…...

LeetCode:盛最多水的容器

文章收录于LeetCode专栏 盛最多水的容器 给你n个非负整数a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点(i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线i的两个端点分别为(i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与…...

阿里云 OSS桶对象存储攻防

目录 Bucket权限配置错误-公开访问 Bucket桶爆破 特定的Bucket策略配置 Bucket Object遍历...

外网禅道配置

exportfs -avrf 修改代码&#xff0c;避免启动太慢&#xff1a;vi /opt/zbox/bin/zbox.php 启动和停止 /opt/zbox/zbox start /opt/zbox/zbox stop...

MM模块学习一(供应商创建,物料类型的定义及功能)

物料管理流程&#xff1a; 源头&#xff1a;采购需求->采购申请 MRP&#xff1a;物料需求计划。运行物料需求计划的结果&#xff0c;根据物料的性质来判断是外购&#xff08;采购申请&#xff09;或者是生产&#xff08;计划订单->生产订单&#xff09;。 采购申请&am…...

玩comfyui踩过的坑之使用ComfyUI_Custom_NODES_ALEKPET翻译组件问题

环境&#xff1a; 秋叶安装包&#xff0c;安装ComfyUI_Custom_NODES_ALEKPET组件或者直接下载网盘中的包&#xff0c;直接解压包到comfyui根目录/custom_nodes/&#xff0c;重启后&#xff0c;按指导文件操作。 注意&#xff1a;网盘指导包中有配置好的流程json文件&#xff0…...

(类)偏特化Partial Specialization

当编写一个模板特化&#xff0c;涉及部分但不是全部模板参数时&#xff0c;它被称为偏特化&#xff08;Partial Specialization&#xff09;。【注意&#xff0c;偏特化是针对类模板而言&#xff0c;函数模板不可偏特化&#xff0c;只能全特化】 偏特化是C模板编程中的一种技术…...

TypeScript 基础学习笔记:interface 与 type 的异同

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 TypeScript 学习笔记&#xff1a;interface 与 type 的异同&#x1f3a3; 引言&#x1f680; 快速入门1️⃣ Interface&#xff08;接口&#xff09;&#x1f4cb; 定义&#x1f91d; 实现&#x1f4a1; 特点 2️⃣ Type Al…...

【管理咨询宝藏95】SRM采购平台建设内部培训方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏95】SRM采购平台建设内部培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 重点是建设一个适应战略采…...

第七届机电、机器人与自动化国际会议(ICMRA 2024)即将召开!

第七届机电、机器人与自动化国际会议&#xff08;ICMRA 2024&#xff09;将于2024年9月20日-22日在中国武汉举行。ICMRA 2024为各国专家学者提供一个学术交流的平台&#xff0c;讨论机电、机器人和自动化领域的最新研究成果和未来的研究方向&#xff0c;旨在能够建立起国家间&a…...

【智能楼宇秘籍】一网关多协议无缝对接BACnet+OPC+MQTT

在繁华的都市中心&#xff0c;一座崭新的大型商业综合体拔地而起&#xff0c;集购物、餐饮、娱乐、办公于一体&#xff0c;是现代城市生活的缩影。然而&#xff0c;这座综合体的幕后英雄——一套高度集成的楼宇自动化系统&#xff0c;正是依靠多功能协议网关&#xff0c;实现了…...

leetCode68. 文本左右对齐

基本思路&#xff1a; leetCode68. 文本左右对齐 代码 class Solution { public:vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> res;for(int i 0; i < words.size(); i){ // 枚举有多少个单词int j i 1; //…...

搜狗输入法 PC端 v14.4.0.9307 去广告绿化版.

软件介绍 搜狗拼音输入法作为众多用户计算机配置的必备工具&#xff0c;其功能的全面性已为众所周知&#xff0c;并且以其高效便捷的输入体验受到广大使用者的青睐。然而&#xff0c;该软件在提供便利的同时&#xff0c;其内置的广告元素常常为用户带来一定的干扰。为此&#…...

【汇总】虚拟机网络不通(Xshell无法连接虚拟机)排查方法

搜索关键字关键字关键字&#xff1a;虚拟机虚拟机虚拟机连接失败、虚拟机无法连接、Xshell连接失败、ping baidu.com失败、静态IP设置 Kali、CentOS、远程连接 描述&#xff1a;物理机无法连接虚拟机&#xff1b;虚拟机无法访问百度&#xff0c;虚拟机无法访问baidu.com 虚拟机…...

C++开发基础之函数参数传递的几种类型

一、前言 在C中&#xff0c;接口指针或类对象的函数参数传递是一个常见的做法&#xff0c;特别是在需要支持多态或动态绑定时。这里将介绍如何传递接口指针或类对象作为函数参数。 二、函数参数传递的几种类型 抽象类&#xff08;接口&#xff09;的实例只能通过指针或引用传…...

使用memcache 和 redis 、 实现session 会话复制和保持

一、NoSQL介绍 NoSQL是对Not Only SQL、非传统关系型数据库的统称 NoSQL一词诞生于1998年&#xff0c;2009年这个词汇再次提出指非关系型、分布式、不提供ACID的数据库设计模式 随着互联网时代的数据爆发时增长、数据库技术发展的日新月异&#xff0c;要适应新的业务需求&am…...

Tomcat 优化

在目前流行的互联网架构中&#xff0c;Tomcat在目前的网络编程中是举足轻重的&#xff0c;由于Tomcat的运行依赖于JVM&#xff0c;从虚拟机的角度把Tomcat的调整分为外部环境调优 JVM 和 Tomcat 自身调优两部分。 一、JVM组成 1. JVM 组成 JVM组成部分 类加载子系统: 使用Ja…...

如何将pdf文件换成3d模型?---模大狮模型网

PDF文件是一种广泛用于文档传输和共享的格式&#xff0c;但在某些情况下&#xff0c;我们可能希望将其中的内容转换为更具交互性和视觉效果的3D模型。本文将介绍如何将PDF文件转换为3D模型&#xff0c;为您展示实现这一想象的步骤。 选择合适的PDF文件&#xff1a; 首先&#…...

Docker 中快速构建 Redis Cluster 集群

Docker 中快速构建 Redis Cluster 集群 目录 前言环境准备 所需软件配置网络 构建 Redis Cluster 镜像 创建自定义 Dockerfile构建镜像 启动 Redis 节点容器 启动命令 配置 Redis Cluster 集群 创建 Redis 集群验证集群状态 总结 前言 Redis 是一个高性能的键值对数据库&am…...

C语言----杨辉三角

各位看官们好。学习到这里想必大家应该对C语言的了解也是很深刻的了吧。但是我们也不能忘记我们一起学习的知识啊。在我们以前学习C语言的时候我想大家应该都听说过杨辉三角吧。虽然我们把其中的规律找到那么这个代码就简单很多了。那么接下里我们就来讲讲杨辉三角。 首先我们先…...

FlaUI

FlaUI是一个基于微软UIAutomation技术&#xff08;简称UIA&#xff09;的.NET库&#xff0c;它主要用于对Windows应用程序&#xff08;如Win32、WinForms、WPF、Store Apps等&#xff09;进行自动化UI测试。FlaUI的前身是TestStack.White&#xff0c;由Roemer开发&#xff0c;旨…...

苏州网站建站公司/深圳seo推广

介绍 彩虹网盘外链是一款PHP网盘与外链分享程序&#xff0c;支持所有格式文件的上传&#xff0c;可以生成文件外链、图片外链、音乐视频外链&#xff0c;生成外链同时自动生成相应的UBB代码和HTML代码&#xff0c;还可支持文本、图片、音乐、视频在线预览&#xff0c;这不仅仅…...

帮人做推广的网站/推广赚钱平台

ubuntu18.04.4源仓库中MySQL的默认版本是5.7&#xff0c;因此可以直接安装 1、更新源并安装 sudo apt-get update #更新源sudo apt-get install mysql-server #安装2、验证安装是否成功 systemctl status mysql3、root用户登录&#xff0c;不需要密码...

seo网站打开慢/专业北京seo公司

儿童节要来啦&#xff0c;这个充满童心的节日&#xff0c;广告人&#xff0c;文案想好没&#xff1f;常规的儿童节文案&#xff0c;基本关键词就是童心、回忆、童趣、孩子等。但是看多了就会有种"一群大人装什么嫩"的感觉。原本挺不错的一场活动&#xff0c;就因为文…...

哪些网站可以找到做海报的素材/百度导航最新版本免费下载

写在前面 是这样的&#xff0c;我们现在接口使用了Ocelot做网关&#xff0c;Ocelot里面集成了基于IdentityServer4开发的授权中心用于对Api资源的保护。问题来了&#xff0c;我们的Api用了SwaggerUI做接口的自文档&#xff0c;那就蛋疼了&#xff0c;你接入了IdentityServer4的…...

公司建设网站的费用/网址提交百度收录

展开全部写的乱七八糟的,不错就怪了.给你改好了.package changepassword;import java.util.Scanner;public class Administrator{String name;//姓名String password;//密码String inputpass;//判断是否正确的密码String newpassword;//再次输入密码String repassword;//第2输入…...

武汉平价网站建设/网络seo是什么工作

链接&#xff1a;https://ac.nowcoder.com/acm/contest/5646/J来源&#xff1a;牛客网题目描述对输入的字符串进行排序后输出输入描述:多个测试用例&#xff0c;每个测试用例一行。每行通过,隔开&#xff0c;有n个字符&#xff0c;n&#xff1c;100输出描述:对于每组用例输出一…...