Linux编译安装程序

rpm安装

rpm包就是作者编译好软件包


yum源安装

yum源就是集合了大量的rpm包软件仓库


为什么要编译安装?

一方面是某些软件根本不提供rpm或deb包,例如较新的软件.
虽然rpmyum可以直接安装软件,但是并不一定能发挥机器的最佳性能。
这就好比你去商场买衣服,衣服只有那几个尺码,穿上并不一定是合身的。
而编译安装,就好比量体定制裁衣,编译好的软件是最符合当前硬件的。


编译安装的步骤

  1. 下载解压
  2. 构建编译选项 (.config/.configure/bootstrap)
  3. 编译 (make/bootstrapd)
  4. 安装 (make install /bootstrapd install)

0.定义程序目录

# 创建程序目录
mkdir -p /usr/local/程序名

## 例如
mkdir -p /usr/local/mysql

## 创建数据库目录
mkdir -p /usr/local/mysql/var

1.下载解压程序源码

# 下载和解压
# wget 和 tar xvf

# 下载源码包到/usr/local/src目录
wget -P /usr/local/src http://github.com/mysql.tar.gz --no-check-certificate

# 解压文件到当前目录
tar xvf muysql.tar.gz

2.构建编译选项

编译的过程是检查系统环境是否能安装该软件

参考:configure参数详解

参考: https://zhuanlan.zhihu.com/p/77813702

configure 支持下面的选项

参数解释
–prefix= 指定安装路径。如果没有指定,默认为 /usr/local/程序名
–sbin-path= 可执行文件安装路径。只能安装时指定,如果没有指定,默认为/sbin/程序名
–conf-path= 在没有给定-c选项下默认的配置文件.conf的路径。如果没有指定,默认为/conf/nginx.conf
–pid-path= 在nginx.conf中没有指定pid指令的情况下,默认的nginx.pid的路径。如果没有指定,默认为 /logs/nginx.pid。
–lock-path= nginx.lock文件的路径。
–error-log-path= 在nginx.conf中没有指定error_log指令的情况下,默认的错误日志的路径。如果没有指定,默认为 /logs/error.log。
–http-log-path= 在nginx.conf中没有指定access_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为 /logs/access.log。
–user=在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。
–group=在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。
–builddir=DIR指定编译的目录
–with-rtsig_module启用 rtsig 模块
–with-select_module启用 select 模块。如果 configure 没有发现更适合的方法(如 kqueue、epoll、rtsig 或 /dev/poll),则默认情况下会启用该模块
–without-select_module禁用 select 模块。如果 configure 发现了更适合的方法(如 kqueue、epoll、rtsig 或 /dev/poll),则默认情况下会禁用该模块
–with-poll_module启用 poll 模块。如果 configure 没有发现更适合的方法(如 kqueue、epoll、rtsig 或 /dev/poll),则默认情况下会启用该模块。
–without-poll_module禁用 poll 模块。如果 configure 发现了更适合的方法(如 kqueue、epoll、rtsig 或 /dev/poll),则默认情况下会禁用该模块。
–with-http_ssl_module启用 ngx_http_ssl_module。启用 SSL 支持和处理 HTTPS 请求的能力。需要 OpenSSL 库。在 Debian 系统上,对应的是 libssl-dev 包。
–disable-FEATURE一些软件包可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置.如果默认是提供这些特性,可以使用’–disable-FEATURE’来禁用它,这里’FEATURE’是特性的名字.例如:
$ ./configure --disable-gui
-enable-FEATURE[=ARG]相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用’–enable-FEATURE’来起用它.这里’FEATURE’是特性的名字.一个特性可能会接受一个可选的参数.
例如:
$ ./configure --enable-buffers=128
`–enable-FEATURE=no’与上面提到的’–disable-FEATURE’是同义的.
–with-PACKAGE[=ARG]在自由软件社区里,有使用已有软件包和库的优秀传统.当用’configure’来配置一个源码树时,可以提供其他已经安装的软件包的信息.例如,倚赖于Tcl和Tk的BLT器件工具包.要配置BLT,可能需要给’configure’提供一些关于我们把Tcl和Tk装的何处的信息:
$ ./configure --with-tcl=/usr/local --with-tk=/usr/local
‘–with-PACKAGE=no’与下面将提到的’–without-PACKAGE’是同义的.
–without-PACKAGE有时候你可能不想让你的软件包与系统已有的软件包交互.例如,你可能不想让你的新编译器使用GNU ld.通过使用这个选项可以做到这一点:
$ ./configure --without-gnu-ld
–enable-static编译静态库
–enable-shared编译动态库
–with-pic仅使用PIC编译,当编译出来的库被其他库调用的时候,其他库使用PIC编译,则依赖的库也需要加PIC
–prefix=/home/carl指定安装位置,如果安装位置不指定,默认路径为/usr/local下的bin、lib等文件夹
–exec-prefix=EPREFIX与’–prefix’选项类似,但是他是用来设置结构倚赖的文件的安装位置.编译好的’emacs’二进制文件就是这样一个问件.如果没有设置这个选项的话,默认使用的选项值将被设为和’–prefix’选项值一样.
–libdir=DIR指定库文件的安装位置.
–includedir=DIR指定C头文件的安装位置.其他语言如C++的头文件也可以使用此选项.
–build执行代码编译的主机,正常的话就是你的主机系统。这个参数一般由config.guess来猜就可以。当然自己指定也可以。可以默认不写,默认为当前正在使用的主机,查看本机使用的可以在configure目录下执行./config.guess
–host就是你编译好的程序可以运行的机器,如果没有指定,将会运行`config.guess’来检测。
–target这个选项只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。如果不编译新的编译器,这个参数可以不填,或者与 host的参数一致。比如你build的机器是x86,想运行的host机器是arm,程序可以处理的程序target是mips
下边的选项需要卸载configure前边,比如CFLAGS=“-g -O0” ./configure
CC指定编译工具链的名字,指定GCC 交叉编译器命令,如果配置了,则使用CC配置的编译器,如果不配置则默认为host对应的GCC工具。如配置了 --host=arm-xilinx-linux-gnueabi,则默认CC的编译器为 arm-xilinx-linux-gnueabi-gcc,这个参数如无特殊指定,可以忽略不写。
CFLAGS指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include
CFLAGS=“-g -O0” ./configure添加-O0级别的调试信息
LDFLAGSgcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib
LIBS告诉链接器要链接哪些库文件,如LIBS = -lpthread -liconv

./configure 默认将程序安装到/usr/local目录下

# 构建编译环境
./config 
# 或
./configure

## 指定安装的路径
--prefix=路径

## 需要依赖的路径
--with-PACKAGE 名= 包所在的路径

## -d 启用调试模式打印详细日志
## shared 编译为共享库(动态链接库)
-d shared

示例:

## --prefix=/usr: 指定安装到目录 /usr
## --disable-profile: 禁用生成性能分析文件(profile)的支持
## --enable-optimizations 启用优化选项,能提高程序运行速度
## --enable-add-ons: 启用附加功能(add-ons)
## --with-headers=/usr/include: 指定头文件的位置
## --with-binutils=/usr/bin: 指定 binutils 工具的位置
### binutils 是一套用于处理二进制文件的开发工具
./configure --prefix=/usr --disable-profile --enable-optimizations --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

3.编译安装

编译安装可以一起写

# 编译,编译安装
make && make install

3.1make编译

大部分时间消耗编译

make产生的生成文件在这几个常见的生成文件目录中:

  1. 可执行文件:通常位于源代码根目录下的 ././bin/ 目录中,或者在项目的特定子目录中,例如 ./build/./out/
  2. 库文件:通常位于源代码根目录下./lib/./libs/ 目录中,或者在项目的特定子目录中。
  3. 中间目标文件:通常位于源代码根目录下./obj/./build/./out/./tmp/ 目录中,或者在项目的特定子目录中。
# 执行编译
make
## -j 指定cpu核心数
make -j 核心数

## 全部CPU核心参与编译--容易死机
make -j

3.2防止make -j死机

# 获取CPU总核心数
cpu_cpunt=$(grep processor -c /proc/cpuinfo)
# 总核心-1,防止make-j死机
cpu_cpunt=$((cpu_cpunt - 1))

# 执行make---保留一核,防止CPU长时间过载宕机
make -j $cpu_cpunt

3.3make检查–非必需执行

对上一步 make 的检查了,要确保 make 是没有错误的,也就是这一步的 test、check要全部是 OK 的,error 为0

# make检查
make test
make check

3.4make安装

# 安装
make install

4.ldconfig更新系统库路径

ldconfig 命令会读取系统指定的库配置文件(通常是 /etc/ld.so.conf/etc/ld.so.conf.d/*.conf),然后扫描这些文件中指定的路径,将其中的共享库文件信息加入到动态链接器的缓存中。

# 更新系统库路径
## -v 以详细模式查看动态链接器的配置过程
ldconfig -v

5.清理

# 清理
make clean

6.将程序添加到$PATH

# profile文件是系统全局变量配置文件
# 编辑/etc/profile
vim /et/profile

# 将编译安装好的程序目录添加到$PATH
### mysql的bin目录
### openssl的bin目录
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin

# 使profile生效
source /etc/profile

cmake

https://www.hahack.com/codes/cmake/

cmake. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/var -DSYSCONFDIR=/etc
## -DCMAKE_INSTALL_PREFIX 是指定程序目录
## -DMYSQL_DATADIR         指定程序数据目录
## -DSYSCONFDIR            指定程序配置文件目录
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值