
Linux编译安装程序
编译安装程序
Linux编译安装程序
rpm安装
rpm
包就是作者编译好
的软件包
yum源安装
yum
源就是集合了大量的rpm包
的软件仓库
。
为什么要编译安装?
一方面是某些软件根本不提供
rpm或deb包,例如较新的软件
.
虽然rpm
和yum
可以直接安装软件,但是并不一定能发挥机器的最佳性能。
这就好比你去商场买衣服,衣服只有那几个尺码,穿上并不一定是合身的。
而编译安装,就好比量体定制裁衣
,编译好的软件是最符合当前硬件的。
编译安装的步骤
- 下载解压
- 构建编译选项 (
.config/.configure/bootstrap
) - 编译 (
make/bootstrapd
) - 安装 (
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.构建编译选项
编译的过程是检查系统环境是否能安装该软件
参考: 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 包。 |
–with-run-dir | 指定运行目录,一般是 /var/run |
–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=/usr/local/app_name | 指定安装位置,如果安装位置不指定,默认路径为/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级别的调试信息 |
LDFLAGS | gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib |
LIBS | 告诉链接器要链接哪些库文件,如LIBS = -lpthread -liconv |
./configure
默认将程序安装到/usr/local
目录下
# 构建编译环境
./config
# 或
./configure
## 指定安装的路径
--prefix=/usr/local/app_name
## 需要依赖的路径
--with-PACKAGE 名= 包所在的路径
## -d 启用调试模式打印详细日志
## shared 编译为共享库(动态链接库)
-d shared
示例:
## --prefix=/usra/local: 指定安装到目录 /usr/local
## --disable-profile: 禁用生成性能分析文件(profile)的支持
## --enable-optimizations 启用优化选项,能提高程序运行速度
## --enable-add-ons: 启用附加功能(add-ons)
## --with-headers=/usr/include: 指定头文件的位置
## --with-binutils=/usr/bin: 指定 binutils 工具的位置
### binutils 是一套用于处理二进制文件的开发工具
./configure --prefix=/usra/local --disable-profile --enable-optimizations --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
3.编译安装
编译安装可以一起写
# 编译,编译安装
make && make install
3.1make编译
大部分时间
都消耗
在编译
上
make
产生的生成文件
在这几个常见的生成文件目录
中:
可执行文件
:通常位于源代码根目录
下的./
或./bin/
目录中,或者在项目的特定子目录中,例如./build/
或./out/
。库文件
:通常位于源代码根目录下
的./lib/
或./libs/
目录中,或者在项目的特定子目录
中。中间目标文件
:通常位于源代码根目录下
的./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
参考cmale保姆教程:https://subingwen.cn/cmake/CMake-primer/index.html
CMake 是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile(通过 make 命令进行项目的构建),大多是IDE软件都集成了make,比如:VS 的 nmake、linux 下的 GNU make、Qt 的 qmake等,如果自己动手写 makefile,会发现,makefile 通常依赖于当前的编译平台,而且编写 makefile 的工作量比较大,解决依赖关系时也容易出错。
而 CMake 恰好能解决上述问题, 其允许开发者指定整个工程的编译流程,在根据编译平台,自动生成本地化的Makefile和工程文件,最后用户只需make编译即可,所以可以把CMake看成一款自动生成 Makefile的工具,其编译流程如下图:
蓝色虚线
表示使用makefile
构建项目的过程
红色实线
表示使用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 指定程序配置文件目录
更多推荐
所有评论(0)