首页 > 系统相关 >3. Linux 源码编译 001

3. Linux 源码编译 001

时间:2023-11-29 10:14:07浏览次数:45  
标签:cmatrix -- make tree 编译 001 源码 Linux 安装

重点:

  1. rpm -i -e -qi -ql -qf -qa --scripts。
  2. yum install remove info list repolist provides。
  3. 配置系统源。
  4. 搭建私有仓库服务器。
  5. 源码编译安装。
  6. ubuntu dpkg apt /etc/apt/sources.list。

1)介绍 源码编译

虽然有很多开源项目将软件打成 RPM 包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软件,大部分可能需要自行下载源码,进行编译安装。

另外即使提供了 RPM 包,在生产中经常针对软件的某些特性,比如对软件版本的要求。仍然需要自行编译安装。但源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具可以大大减少编译过程的复杂度。

 

编译安装 优势:

1)使用 yum 安装软件可以确保便捷性,但它可能限制了一些自定义选项。

比如 yum 安装会自动将软件安装到其默认路径。然而,对于更多的自定义需求,编译安装(configure 编译安装)可能是更灵活的选择。

编译安装允许您传递参数,指定安装路径,启用或禁用特定功能,并满足特定的需求。

这种方式提供了更多的控制权,适用于需要定制化配置的情况,但也需要更多的手动工作和处理依赖关系。

2)使用 yum 安装的软件通常会根据软件包的默认路径分散安装在系统中,而编译安装可以将所有文件统一存放在指定目录中,提供了更好的管理和维护灵活性。

这有助于集中管理并更加容易卸载整个应用程序,只需删除相关目录即可。

3)使用 yum 安装软件时,系统通常会将软件的所有默认特性都安装,这可能会导致资源浪费,尤其是如果您只需要其中一部分特性。

此外,某些特定特性可能不是默认安装的,你还需要手动配置或单独安装,这会增加配置的复杂性。

在这种情况下,编译安装允许您更精确地选择所需的特性,并自定义软件的安装配置,以确保满足项目需求,同时减少不必要的资源占用。

这种方式提供了更大的灵活性,可以更好地满足特定用例的要求,而不是盲目地安装所有默认特性。

 

程序包编译安装

源代码 >> 预处理 >> 编译 >> 汇编 >> 链接 >> 执行

多文件:文件中的代码之间,很可能存在跨文件依赖关系。

 

2)获取开源程序源代码

项目官方自建站点:

  1. apache.org
  2. mariadb.org

代码托管:

  1. Github.com
  2. Gitee.com
  3. SourceForge.net
  4. code.google.com

 

3)编译源码的项目工具

  1. C、C++ 的源码编译:使用 make 项目管理器。
    1. configure 脚本 >> Makefile.in >> Makefile

相关开发工具:

autoconf: 生成 configure 脚本

automake:生成 Makefile.in

  1. java 的源码编译: 使用 maven。

 

4)C 语言源代码 编译安装过程

利用编译工具,通常只需要 三个大的步骤。

  1. ./configure
    1. 通过选项 传递参数,指定安装路径、启用特性等;执行时会参考用户的指定以及 Makefile.in 文件 生成 Makefile 文件。
    2. 检查依赖到的外部环境,如依赖的软件包。

./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_perl_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

  1. make 调用 Makefile 文件,会检测依赖的环境,进行构建应用程序。

make -j4

  1. make install 复制文件到相应路径。

make install

注意:安装前可以通过查看 README,INSTALL 获取帮助。

 

4.1)编译安装准备

准备:安装相关的依赖包

  1. 开发工具:make, gcc (c/c++编译器GNU C Complier)
  2. 开发环境:开发库(glibc:标准库),头文件,可安装开发包组 Development Tools
  3. 软件相关依赖包。

生产实践:基于最小化安装的系统建议安装下面相关包。

yum install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages

 

4.2)编译安装

第一步

运行 configure 脚本:生成 Makefile 文件。

其选项主要功能:

      1. 可以指定安装位置
      2. 指定启用的特性

[ 获取其支持使用的选项 ]

./configure --help

选项分类:

  1. 安装路径设定
    1. --prefix=/PATH:指定默认安装位置,默认为/usr/local/。
    2. --sysconfdir=/PATH:配置文件安装位置。
    3. System types:支持交叉编译。
  2. 软件特性和相关指定:
    1. Optional Features:可选特性
      1. --disable-FEATURE
      2. --enable-FEATURE[=ARG]
    2. Optional Packages: 可选包
      1. --with-PACKAGE[=ARG]
      2. --without-PACKAGE

注意:通常被编译操作依赖的程序包,需要安装此程序包的 "开发" 组件,其包名一般类似于 name-devel-VERSION。

 

第二步

make

 

第三步

make install

 

4.3)安装后的配置

第一步

二进制程序目录导入至 PATH 环境变量中

编辑文件 /etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

 

第二步

相关用户及文件

有些开源软件编译完成后,还需要创建相关的用户及文件。

 

第三步

导入帮助手册

编辑 /etc/man.config|man_db.conf 文件,添加一个 MANPATH

 

5)编译安装 实战案例

5.1)示范 1

CentOS 7 编译安装 tree2.1

// 查看`软件包详细信息`

rpm -qi tree

截图.png

 

官网下载最新软件包源码

wget http://mama.indstate.edu/users/ice/tree/src/tree-2.1.1.tgz

截图.png

 

tgz:其实就是 tar.gz 的简写。

tar xzvf tree-2.1.1.tgz -C /usr/local/src

截图.png

cd /usr/local/src && ls

 

// 进入源码包目录

cd tree-2.1.1/ && ls

[ 可以看到,该目录下并没有 configure 脚本,直接存在的 Makefile 文件,这是什么原因呢?]

这种情况通常发生在软件项目非常简单,不需要复杂的配置步骤时。在这种情况下,开发者可能会直接提供一个简单的 Makefile 文件,而不使用更复杂的 configure 脚本。这样可以简化软件的构建过程,使其更容易使用和编译。

截图.png

 

修改 Makefile 自定义软件存放路径

// 自定义`配置信息`

// `修改软件存放路径`

vim Makefile

截图.png

 

甚至 我们还可以修改其源码。

// 我们将原本代码中编写的 2.1.1 版本信息

// 修改为了 8.8.8

vim tree.c

 

/2.1.1

截图.png

// 安装相关软件包

yum install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages

 

// 验证 GCC

gcc -v

截图.png

 

1. 编译

make

 

2. 编译安装

make install

截图.png

 

// 验证

ll /apps

 

// 查看版本

/apps/tree/bin/tree --version

 

// 验证命令

/apps/tree/bin/tree

截图.png

截图.png

 

1. 软链接[ 针对全局 ]

[ 所有用户都会优先寻找 /usr/local/bin 下的二进制文件,因此所有用户都会优先执行该版本 tree 命令 ]

// "老版本 tree 路径"

[15:41:29 root@blog ~] which tree

/usr/bin/tree

 

// `查看 PATH 默认会找寻哪些目录下的 bin 文件`

[15:43:58 root@blog ~] echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

 

// `将新版本 tree 执行另一个 PATH 也会找寻的路径 "并且优先级比 /usr/bin 高"`

[15:44:36 root@blog ~] ln -s /apps/tree/bin/tree /usr/local/bin/

 

// "清理缓存"

[15:44:36 root@blog ~] hash -r

 

// "根据 PATH 可以得知"

// `系统会优先找寻 /usr/local/bin 下的二进制文件进行执行` "/usr/local/bin 优先级更高"

[15:44:36 root@blog ~] tree

截图.png

 

 

2. 别名 [ 针对用户 ]

alias tree='/usr/bin/tree'

截图.png

 

3. 环境 [ 实用 ]

// "软链接 and 别名"

// `仅针对一个二进制文件进行处理`

echo 'PATH=/apps/cmatrix/bin:$PATH' > /etc/profile.d/cmatrix.sh

source /etc/profile.d/cmatrix.sh

 

5.2)示范 2

编译安装 cmatrix

截图.png

1. 安装相关软件包

yum install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages

 

2. 下载并解压缩包

cd /usr/local/src

wget https://github.com/abishekvashok/cmatrix/releases/download/v2.0/cmatrix-v2.0-Butterscotch.tar

tar xvf cmatrix-v2.0-Butterscotch.tar

 

3. 配置

cd cmatrix/

 

// more configure # configure 是一个脚本

// configure --help # 查看 configure 帮助

./configure --prefix=/apps/cmatrix

截图.png

 

4. 编译

make -j 2

 

// 4.1 make 编译报错, 缺 curses.h 文件 [ 2. make 编译报错, 缺 autoheader 命令, 也可执行 yum provides xxx 找到命令依赖的软件包名称, 而后安装即可 ]

// 4.2 yum provides 查找该文件所属哪个软件包

// 4.3 安装该软件包

yum install ncurses-devel-5.9-14.20130511.el7_4.i686

截图.png

截图.png

 

如何解决??

[ 重头开始,重新编译。]

// 重要依赖

yum -y install ncurses* gcc gcc-c++

 

// 重新编译

cd ..

rm -rf cmatrix/

tar xvf cmatrix-v2.0-Butterscotch.tar

cd cmatrix/

 

// configure 配置

./configure --prefix=/apps/cmatrix

 

// 编译并安装

make

make install

 

// 验证

ll /apps

截图.png

截图.png

 

5. 配置环境 "建议"

echo 'PATH=/apps/cmatrix/bin:$PATH' > /etc/profile.d/cmatrix.sh

source /etc/profile.d/cmatrix.sh

 

// 或者用软链接实现

// ln -s /apps/cmatrix/bin/cmatrix /usr/local/bin/

 

6. 运行

cmatrix -a -b -C green

截图.png

 

7. 帮助

 

man cmatrix

截图.png

标签:cmatrix,--,make,tree,编译,001,源码,Linux,安装
From: https://www.cnblogs.com/wuhanjiayou/p/17863873.html

相关文章

  • linux设备的识别和查看
    (1)、设备的识别设备名称 显示方式SATA/SAS/USB(硬盘) /dev/sda,/dev/sdb###s=SATA.d=DISK,a=第几块硬盘IDE(硬盘) /dev/hd0,/dev/hd1##h=hardVIRTIO-BLOCK(硬盘) /dev/vda,/dev/vdb##v=virtioM2(SSD) /dev/nvme0,/dev/nvme1##nvme=m2光驱 /dev/cdrom,/dev/sr0,/dev/sr1查看设备的......
  • Linux 中获取文件完整路径的4种方法介绍
    我们都知道,在命令行可以使用pwd命令来获取当前目录的完整路径(绝对路径):pwd那么,如何获取文件的绝对路径呢?有下列几种方法,可以打印文件的完整路径:readlinkrealpathfindls和pwd组合使用$readlink-fsample.txt/home/gliu/sample.txt$realpath-ssample.txt/home/gliu/samp......
  • linux存储管理及分区
    存储管理1.添加一块硬盘,并能正确使用它。步骤:添加一块磁盘(虚拟机设置处添加),lsblk能够查看。创建分区fdisk​m查看全部可用的参数​n添加新的分区​d删除某个分区信息​l列出所有可用的分区类型​t改变某个分区的类型​p查看分区信息​w保存并退出​q不保存直接退......
  • Linux文件管理
    Linux文件目录不同于windows平台,Linux的根目录为‘\’,在这一根目录下,存放着一些重要的文件夹,比如bin、etc、home、usr、tmp、root、sbin、var,其中bin用来存放二进制的可执行文件,常用的一些命令存在这里;etc存放系统管理和配置文件;home存放所有用户文件的根目录,是用户主目录的基......
  • linux启动mysql数据库,报错mysql: error while loading shared libraries: libtinfo.so
    如下 原因: 解决方案:1、在/usr/lib64目录里面找一个差不多名称版本的文件进行链接#软连接出一个新的文件sudoln-s/usr/lib64/libtinfo.so.6.1/usr/lib64/libtinfo.so.5若本服务器没有相近版本的文件2、从其他服务器下载一个libtinfo.so.5拷贝进去即可,或者下载相近版本......
  • linux安装MySQL数据库初始化报错
    在使用如下初始化命令进行数据库初始化时报错,./bin/mysqld--user=mysql--basedir=/usr/local/mysql/mysql/--datadir=/usr/local/mysql/mysql/data/--initialize--lower-case-table-names=1; 权限不足导致,修改命令为:./bin/mysqld--user=root--basedir=/usr/local/mysql/m......
  • Linux shell简介
    Linuxshell简介一、什么是shell?shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。为什么要学习和使用shell?Shell属于......
  • Linux文件权限
    权限的意义在于允许某一个用户或某个用户组以规定的方式去访问某个文件。基本权限UGO  首先介绍U、G、O这三个字母所代表的含义。   U:owne,属主   G:group,属组   O:other,其他用户  Linux系统通过U、G、O将用户分为三类,并对这三类用户分别设置三种基......
  • Linux文件权限
    权限的意义在于允许某一个用户或某个用户组以规定的方式去访问某个文件。基本权限UGO  首先介绍U、G、O这三个字母所代表的含义。   U:owne,属主   G:group,属组   O:other,其他用户  Linux系统通过U、G、O将用户分为三类,并对这三类用户分别设置三种基......
  • Linux中存储的基本管理
    Linux中存储的基本管理存储管理方式是Linux中的基本知识,这部分内容主要有设备识别,设备查看,设备挂载,设备文件的查找,磁盘的分区等,下面我们来针对每个部分进行分别讲解。一、设备查看fdisk-l查看磁盘分区情况lsblk设备使用情况blkid设备管理方式及设备iddf查看正在被......