源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

内容

分类源包 源包有哪些

源代码包

通常是指用 C 语言开发的源代码文件的压缩包(.tar.gz 或 .tar.bz2)。源代码包的编译使用Linux系统中的编译器gcc,可以用来将源码包做成可执行的二进制文件。

源包功能

源码包的优点:

源码包的缺点:

二元的包

二进制包分类无论是 RPM 包管理器还是 DPKG 包管理器,都存在包依赖问题,比如包 A 依赖包 B,包 B 依赖包 C源码编译安装的步骤mac

即依赖是“A -> B -> C”,那么必须先安装 C,安装 B,最后 A 才能安装成功。

为了解决这些依赖问题,Linux 开发者提供了在线安装机制,通过该机制可以手动解析依赖关系,安装 A 时手动安装 B 和 C。

二进制包功能

RPM 封装的优点:

RPM 软件包的缺点:

源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

RPM 安装 rpm 软件包命名约定

rpm 软件包的默认安装路径

转速包安装

转速包安装

安装命令:rpm -ivh 软件包全名

转速包升级

升级命令:rpm -uvh 软件包全名

升级命令:rpm -fvh 软件包全名

RPM 软件包卸载

卸载命令:rpm -e 软件包名称

转速包查询转速验证命令

如果执行命令后没有提示,则表示未进行任何更改;如果执行命令后有内容输出,则包文件已更改。

例子

源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

[root@letty-02 Packages]# rpm -Va
....L....  c /etc/pam.d/fingerprint-auth
....L....  c /etc/pam.d/password-auth
....L....  c /etc/pam.d/postlogin
....L....  c /etc/pam.d/smartcard-auth
....L....  c /etc/pam.d/system-auth
.M.......  c /etc/cups/subscriptions.conf
S.5....T.  c /etc/plymouth/plymouthd.conf
S.5....T.  c /etc/profile
S.5....T.  c /etc/issue
S.5....T.  c /etc/issue.net
S.5....T.  c /var/lib/unbound/root.key
S.5....T.  c /etc/sysconfig/authconfig
验证内容    文件类型    文件路径

验证内容中有8个信息内容:

文件类型:数字

证书 数字

证书验证

rpm -V 的校准方法只能校准已安装的 RPM 包中的文件。要在安装前校准 RPM,需要数据证书身份验证:

数字证书位置

数字证书可以在CD-ROM上找到:

[root@letty-02 ~]# ll /mnt/RPM-GPG-KEY-CentOS-
RPM-GPG-KEY-CentOS-7          RPM-GPG-KEY-CentOS-Testing-7 

默认值也放置在系统中:

[root@letty-02 ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-
RPM-GPG-KEY-CentOS-7          RPM-GPG-KEY-CentOS-Debug-7    RPM-GPG-KEY-CentOS-Testing-7

数字证书导出

[root@letty-02 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 
选项:
    --import:导入数字证书
[root@letty-02 ~]# rpm -qa | grep gpg-pubkey    --查询系统中安装好的数字证书
gpg-pubkey-f4a80eb5-53a7ff4b

百胜安装(rpm包在线安装)百胜是哪个

yum 软件存储库是一种进一步简化 RPM 管理软件难度并手动剖析所需软件包及其依赖项的技术。yum 的关键是拥有可靠的存储库,它也可以从指定的服务器手动下载和安装 RPM 软件包。YUM 可以手动解决软件依赖问题并一次安装所有依赖包。

百胜源配置文件

百胜源配置文件

存储在 /etc/yum.repos.d/ 目录中,文件的扩展名必须是“.repo”,只要扩展名是“.repo”,yum 源配置文件就会生效。

[root@letty-02 yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo

上面显示了 /etc/yum.repos.d/ 目录中的文件,默认情况下,CentOS-Base.repo 文件生效。

[root@letty-02 yum.repos.d]# vim CentOS-Base.repo    --展示该文件中的base容器
[base]  
name=CentOS-$releasever - Base   
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra 
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/    
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

设置本地 CD 百胜源 将 CentOS CD 安装到指定位置

[root@letty-02 /]# mkdir /mnt/cdrom     --创建挂载点
[root@letty-02 /]# mount /dev/cdrom /mnt/cdrom/    --挂载光盘到/mnt/cdrom目录下
mount: /dev/sr0 is write-protected, mounting read-only

为了使 centOS 7.repo 文件真正起作用,有必要使其他 yum 源文件失效。您可以将 yum 源配置文件转移到其他地方的 /etc/yum.repos.d/ 目录中

[root@letty-02 yum.repos.d]# mkdir sys
[root@letty-02 yum.repos.d]# mv *.repo sys
[root@letty-02 yum.repos.d]# ls
sys

创建本地 yum 源配置文件

[root@letty-02 yum.repos.d]# vim centos7.repo    
[centos7]
name=centos7
baseurl=file:///mnt/cdrom    --地址设置为光盘挂载地址
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

测试

[root@letty-02 yum.repos.d]# yum list available 
Loaded plugins: fastestmirror, langpacks
centos7                                                                          | 3.6 kB  00:00:00     
(1/2): centos7/group_gz                                                          | 155 kB  00:00:00     
(2/2): centos7/primary_db                                                        | 2.8 MB  00:00:00     
Loading mirror speeds from cached hostfile
Available Packages
389-ds-base.x86_64                                   1.3.4.0-19.el7                              centos7
389-ds-base-libs.x86_64                              1.3.4.0-19.el7                              centos7
ElectricFence.x86_64                                 2.2.2-39.el7                                centos7
GeoIP.x86_64                                         1.5.0-9.el7                                 centos7
......

百胜源配置文件优化

源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

通过网易百胜源优化:

单击 CentOS 7 直接下载存储库文件,然后将其连接到 Linux 系统。

右键单击 CentOS 7 并选择复制链接以从 Linux 上的 wget 命令下载它

[root@localhost Desktop]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
--2021-04-30 16:10:58--  http://mirrors.163.com/.help/CentOS7-Base-163.repo
Resolving mirrors.163.com (mirrors.163.com)... 111.2.178.103, 111.2.178.101, 111.2.178.102
Connecting to mirrors.163.com (mirrors.163.com)|111.2.178.103|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1572 (1.5K) [application/octet-stream]
Saving to: ‘CentOS7-Base-163.repo’
100%[===================================================>] 1,572       --.-K/s   in 0s      
2021-04-30 16:10:58 (261 MB/s) - ‘CentOS7-Base-163.repo’ saved [1572/1572]
[root@localhost Desktop]# mv CentOS7-Base-163.repo /etc/yum.repos.d/
[root@localhost Desktop]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS7-Base-163.repo  centos7.repo  sys
[root@localhost yum.repos.d]# mv centos7.repo sys
[root@localhost yum.repos.d]# ls
CentOS7-Base-163.repo  sys
[root@localhost yum.repos.d]# yum repolist    --检查可用的yum源信息
Loaded plugins: fastestmirror, langpacks
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
repo id                               repo name                                        status
!base/7/x86_64                        CentOS-7 - Base - 163.com                        10,072
!extras/7/x86_64                      CentOS-7 - Extras - 163.com                         463
!updates/7/x86_64                     CentOS-7 - Updates - 163.com                      1,901
repolist: 12,436

百胜命令

yum 命令格式:yum [选项] 命令 [包]。包

:如果是包名,默认为最新版本的包;如果要指定包版本,则需要使用完整的包名称

安装命令

升级命令

注: 在执行升级操作时,yum 源服务器中的软件包版本高于本地安装的软件包版本。

卸载命令

注意:除非您确定要卸载的软件依赖项不会影响系统,否则不要执行 yum 卸载。

查询命令 yum 缓存

源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

默认情况下,通过 yum 成功安装软件后,下载的软件包将被删除。如果要保留下载的包,可以编辑 /etc/yum.conf 并将上面的参数 keepcache 更改为 1(默认 keepcache=0)。这样,每次通过 yum 安装软件时,下载的包都会缓存在 /var/cache/yum/ 目录中,下次安装相同的软件时,可以直接从缓存中获取包,无需网络即可正常安装。

百胜集团管理命令

软件组是指一组相关的软件包(不是依赖项),并且可以通过 yum 命令批量管理组中的软件包。

源代码包安装注意事项 安装过程 下载源码包,解压源

码包,单步进入解压目录。 编译前配置

– 安装前测量系统环境是否满足安装要求。

– 定义所需的功能选项,例如通过“./configure --prefix=安装路径”指定安装路径。您可以执行“./configure --help”命令来查询其支持的功能。

– 创建一个makefile文件,并写入系统环境的监控结果和定义的功能选项,后续的编译和安装需要依赖该文件的内容。进行编译

make将调用GCC编译器并读取makefile文件中的信息以进行系统软件编译。编译的目的是将源代码程序转换为Linux可以识别的可执行文件,这些可执行文件存储在当前目录中。编译过程非常耗时。清理以清除编译的内容(不是必需的步骤)。

如果在“./configure”或“make”编译中报告了错误,则必须在重新执行命令之前执行makeclean命令,这将清空Makefile文件或编译的“.o头文件”。 使安装编译和安装

真正的安装过程通常会清楚地写出程序的安装位置。如果忘记指定安装目录,可以保存此命令的执行以备将来删除。

注意:

执行 ./configure 命令时,可能会提示缺少 gcc 等依赖程序,因此需要使用 yum 等方法先安装依赖程序。并非所有源码包安装都必须执行“./configure”、“make”和“make install”三个命令,只有少数源码包安装命令可能有些不同,比如 MySQL 5.5 版本安装源码包后,使用 “cmake” 命令代替 “./configure”。一般在解压完源码包后,有安装文档,安装前可以阅读以下文档。一般在去第三方官网下载源码包的时候,也会提供一个已经编译好的二进制包,里面包括已经编译好的可以立即运行的程序,所以解压后可以直接单步进入“xxx/bin/”目录找到相关命令直接运行。卸载

如果在以下情况下指定安装目录

通过源码包安装,比如“./configure --prefix=install path”,卸载“rm -rf install path”时只需要删除整个安装目录,而且是100%卸载的源码编译安装的步骤mac,不会经常像Windows这样的很多注册表那样留下垃圾。

如果安装源码包时没有指定安装目录,安装软件生成的文件会存储在 bin、lib 等 /usr/local/ 下的其他目录下,删除起来比较麻烦。因此,建议在安装源码包时一定要指定安装目录,方便卸载。如果忘记指定安装目录,可以保存 make install 命令的执行过程以备将来删除。

首先,地址的概念和程序的工作原理

在多程序环境中,要运行程序,必须首先为其创建一个进程。创建进程时要做的第一件事是将程序和数据放入视频内存中。如何将用户源程序转换为可以在视频内存中执行的程序通常要经过以下步骤:

首先是编译:

编译器将用户源代码编译为CPU可以执行的目标代码,从而产生多个对象模块(即几个程序段)。目标代码形成后,每个目标代码以0作为基址顺序寻址,并将所访问的单位原符号名称替换为特定数据——单位号。以这种方式生成的目标程序抢占了某个地址空间,该地址空间称为作业的逻辑地址空间,称为逻辑空间。逻辑

空间中每条指令的地址和指令中要访问的操作数的地址也称为逻辑地址。很简单,逻辑地址是源程序中使用的地址,或者是编译器在编译源代码后将某些标签和变量转换为的地址。

这后面是链接

链接器链接编译后生成的一组目标模块(程序段)和它们所需的库函数,形成一个完整的加载模块;

最后,输入(地址重新定位)。

加载程序将模块放入物理内存中。物理内存是插入显卡内存插槽的内存模块的实际数量的大小。物理内存内存

由多个存储单元组成,每个存储单元都有一个数字,可以唯一标识一个存储单元,称为内存地址(或化学地址)。我们可以把视频内存想象成一个字节-字节-字节编号的字段,从0字节到视频内存的最大容量,即每个存储单元对应内存地址的编号。

加载模块实际上有一个统一的地址空间,但它仍然使用“0”作为参考地址,即它是浮动的。要将其放入内存中执行,需要确定存储器的实际化学地址并更改与程序中的地址相关的代码,此过程称为地址重定位。地址重定位主要是将逻辑地址转换为物理内存绝对地址,也称为地址映射。

图4-2 用户程序的处理步骤

ii. 程序链接

源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

源程序编译好后,可以得到一组目标模块,然后借助链接器将这组目标模块链接起来,形成一个模块。根据链接时间的不同,链接可分为以下三种类型:

(1)静态链接。在程序运行之前,将每个目标模块及其所需的库函数链接到一个完整的组装模块中,以后不要将其拆解。我们称这些形式的先验链接为静态链接。

(2)加载时的动态链接。这是指编译用户源程序后得到的目标模块集,放入显存时,采用边插入边链接的形式。

(3) 运行时动态链接。这是指单个目标模块的链接,仅在程序执行中需要(目标)模块时才执行。

1. 静态链接

让我们用一个例子来说明实现静态链接时应该解决的一些问题。图 4-4(a) 显示了三个编译的目标模块 A、B 和 C,它们是宽 L、M 和 N。模块 A 中有一个句子调用 B 调用模块 B。在模块 B 中有一个句子 CALL C 调用模块 C.B 和 C 是外部调用符号,将这些目标模块组装成一个模块时必须解决以下两个问题

(1) 更改相对地址。在编译器形成的所有目标模块中,使用相对地址,起始地址为 0,每个模块中的地址相对于起始地址进行估计。链接到一个 put 模块后,输入模块中原模块 B 和 C 的起始地址不再是 0,而是分别为 L 和 L+M,所以此时需要更改模块 B 和 C 中的相对地址,即在原 B 中的所有相对地址上加 L, 并将 L+M 添加到原始 C 中的所有相对地址。

(2) 转换外部调用符号。每个模块中使用的外部调用符号也转换为相对地址,例如将B的起始地址转换为L,将C的起始地址转换为L+M,如图4-4(b)所示。这种链接首先生成一个完整的输入模块,也称为可执行文件。它通常不再被拆开,可以在运行时直接放入视频内存中。这种预先链接,以后不拆卸的形式称为静态链接。

4-4 程序链接图

2.加载时动态链接用户

源程序编译后获得的目标模块在放入视频存储器的同时链接,

源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

也就是说,在放入目标模块时,如果发生外部模块调用风暴,将导致程序找出相应的外部目标模块并将其放入视频内存中,并按照图4-4所示的方法更改目标模块中的相对地址。加载时动态链接表单具有以下优点:

(1)易于更改和更新。对于通过静态链接组合在一起的放置模块,如果要更改或更新其中一个目标模块,则需要重新打开放置模块。除了效率低下之外,这有时是不可能的。在动态链接的形式中c源码提示未编译,更改或更新每个目标模块非常容易,因为它是单独存储的。

(2)方便实现目标模块的共享。在静态链接的形式中,每个应用程序模块必须丰富其目标模块的副本,并且不可能共享目标模块。但是,以动态链接的形式,操作系统可以轻松地将一个目标模块链接到多个应用程序模块,并实现多个应用程序对模块的共享。

3.运行时动态链接

在许多情况下,每次运行应用程序时要运行的模块可能不同。但是,由于事先不知道这次将运行哪些模块,因此只能将所有可能运行的模块倒入视频内存中,并在插入时将它们全部链接在一起。显然,这是低效的,因为通常某些目标模块根本不运行。一个典型的示例是用于错误处理的目标模块,如果程序运行没有错误,则似乎不会使用它。近年来流行的运行时动态链接形式是对上述投入链接形式的改进。这种链接形式是将各个模块的链接延迟到程序执行,即在执行过程中,当发现被调用的模块仍未放入视频内存时,操作系统立即找到该模块并将其放入视频内存中,将其链接到调用方模块。任何在执行过程中未使用的目标模块都不会被调用到视频内存中并链接到输入模块,这不仅可以促进程序插入过程,还可以节省大量的视频内存空间。

iii. 程序的放置(地址更改)。

为了方便起见,我们来介绍一下放置不需要链接的单个目标模块的过程。目标模块也是丢弃模块。将模块放入内存时,可以有绝对放置形式、可重定位放置方法和动态运行时加载方法,如下所述。

1. 绝对加载模式

在编译时,如果您知道程序将驻留在视频内存中的位置,则编译器将使用绝对地址形成目标代码。也就是说,根据物理存储器的位置分配给它的实际化学地址。例如,如果事先知道用户程序(进程)驻留在从 R 开始的位置,则编译器形成的目标模块(即插入的模块)将从 R 开始扩展。绝对放入程序中,根据模块中放置的地址将程序和数据放入视频内存中。加载的模块放入视频内存后,无需更改程序和数据的地址,因为程序中的逻辑地址与实际内存地址完全相同。程序中使用的绝对地址可以在编译或汇编时给出,也可以由程序员直接分配。

这种方法的优点是 CPU 可以快速执行目标代码。

缺点:1)由于显存的大小限制,可以放入显存中并发执行的进程数量大大减少

2)编译器必须知道内存的当前空闲地址部分及其地址,并连续存储进程的不同程序段,这是非常复杂的。由于该计划

源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

因此,即使在程序中也通常采用符号地址,然后在编译或汇编时将该符号地址转换为绝对地址。

如何将虚拟内存地址空间转换为视频内存唯一的一维数学线性空间?涉及两个问题:地址

映射是虚拟地址和内存地址之间的关系。

2.静态地址重定位(重定位加载模式)。

绝对放置方法只能将目标模块放置在视频内存中预先指定的位置。在多通道环境中,编译器无法预测编译的目标模块应该放在视频内存中的位置,因此绝对 put 方法仅适用于单通道程序环境。在多通道程序环境中,获得的目标模块的起始地址一般从0开始,程序中的其他地址也是相对于起始地址估计的。此时,应使用可重定位的放置方法,并根据视频内存的当前情况,将插入模块放置在视频内存的适当位置。

静态地址重定位:即在将目标代码放入程序的视频内存的过程中完成,这意味着在程序开始运行之前,程序中指令和数据的每个地址都已经重新定位c源码提示未编译,即虚拟地址到内存地址的映射完成。地址转换通常在放入时进行一次,以后不会更改。

值得注意的是,使用可重定位插入程序将模块放入内存后,放入模块中的所有逻辑地址将与实际放入内存的数学地址不同,如图4-3所示。

图 4-3 将作业放入视频内存时

例如,有一个指令 LOAD 1,2500

在用户程序的单元格1000处,并且该指令的功能是获取单元格2500中的整数365以寄存器1。但是,如果用户程序在没有地址转换的情况下放入单元10000~15000的内存中,则在执行单元11000中的指令时,它仍然会从单元2500获取数据以寄存器1并导致数据错误。从图4-3可以看出,正确的方法应该是将数字指令中的地址2500修改为12500,即在本程序的视频存储器中加上指令中的相对地址2500和起始地址10000,得到正确的化学地址12500。除了要更改数据地址外,还必须以相同的方式更改指令地址,即必须添加指令1000的相对地址和起始地址10000,才能得到绝对地址11000。

优点: 无需硬件支持

源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。

缺点:1)程序重新定位后,无法在显存中移动;

2)要求程序的存储空间是连续的,并且程序不能放置在几个不连续的区域。

3. 动态地址恢复(动态运行时加载)。

可重定位放置方法可以将插入模块放在视频内存中任何允许的位置,因此可以在多通道程序环境中使用;但是,这些方法不允许程序在程序运行时连接视频内存中的位置。由于程序在视频内存中的连接意味着其化学位置已更改,因此必须更改程序的地址和数据(即绝对地址)才能运行。但是,现实情况是,它在视频内存中的位置在运行时可能会频繁更改,因此应使用动态运行时加载。

动态地址重定位:地址转换不是在程序执行之前而是在程序执行期间发生。更准确地说,这些地址转换被推迟到程序实际执行,也就是说,在每次访问存储单元之前,访问的程序或数据地址都转换为内存地址。动态重定位允许装配模块无需任何更改即可放入内存中。为了使地址转换不影响指令的执行率,该方法需要重新定位寄存器的支持。

优点:1)目标模块放入显存时不需要任何改动,因此重新定位后不会影响其正确执行,对内存收紧和解决碎片化问题非常有利;

2)当一个程序由几个相对独立的目标模块组成时,每个目标模块被放入一个存储区,这些存储区不能按顺序相邻,只要每个模块都有自己对应的定位寄存器即可。

缺点: 需要硬件支持。

Windows NT 动态链接库

5.1. 构建动态链接库

DLL是一个包含函数和数据的模块,它的调用模块可以是EXE或DLL,由调用模块在运行时加载;加载后,它将映射到调用进程的地址空间。在 VC 中,有一类用于创建 DLL 的项目。

5.2 如何放置.DLL

1)加载时间:在

编程时显式调用 DLL 函数,该函数在可执行文件中称为导入函数。

链接是在 的帮助下创建的。LIB 文件。在可执行文件中为引入的每个 DLL 生成一个IMAGE_IMPORT_DESCRIPTOR结构。

插入时,系统会根据进程中 DLL 映射的地址重写导入地址表中的函数引脚。提示是DLL文件中DLL函数的序号,当DLL文件被修改时,它可能不指向原来的DLL函数。放后,系统会找到对应的DLL,将其映射到进程地址空间,获取DLL中每个函数的入口地址,并在进程中定位对此类函数的引用

加载时的动态链接进程:

(注意:导入地址表是根据插入时DLL模块的加载位置确定的)。

调用 DLL 函数的过程:

2) 运行时间:

DLL 函数在编程过程中通过 API 使用,例如 LoadLibrary(给定 DLL 名称,在放入并链接后将句柄返回给 DLL)、FreeLibrary、GetProcAddress(其参数包括函数的符号名称,并返回函数的入口引脚)。不再需要导入库。

运行时动态链接示例:

HINSTANCE hInstLibrary;//模块句柄定义
DWORD (WINAPI *InstallStatusMIF)(char*, char*, char*, char*, char*, char*, char*, BOOL);//函数指针定义
if (hInstLibrary = LoadLibrary("ismif32.dll"))//映射
	 {
	   InstallStatusMIF = (DWORD (WINAPI *)(char*,char*,char*, char*, char*, char*, char*, BOOL)) 
GetProcAddress(hInstLibrary, "InstallStatusMIF");//获得函数指针
		if (InstallStatusMIF)
		{
        if (InstallStatusMIF(“office97”, “Microsoft”, “Office 97”, “999.999”, “ENU”, 
“1234”, ”Completed successfully”, TRUE) !=0)//调用DLL模块中的函数
			{
			}
		}
		FreeLibrary(hInstLibrary);//拆除映射
	 }

收到礼品包

后台私信我【礼包】,前100人将额外赠送价值1699的内核包(包括视频教程、电子书、实用项目和代码)。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 源码编译安装的步骤mac-在 CentOS 7 中安装软件的三种方法(RPM、YUM、源码包)。 https://www.wkzy.net/game/130680.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务