一、简述
什么是编译安装?
用户在自己所在平台编写的应用程序(源代码格式),并不能满足所有平台用户的使用,所以需要使用的用户在自己的平台环境下进行编译,编译成适合自己平台的应用程序进行安装和使用。
源代码组织格式
多文件:文件中的代码之间,很可能存在跨文件的依赖关系。
C、C++:make(configure --> Makefile.in --> makefile),
java:maven。
编译安装的好处?
可进行软件功能的自定义。
优化编译参数,提高性能。
解决不必要的软件间依赖。
编译安装的流程?
testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装。
源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行
C代码编译安装的三步骤
./configure
1)通过选项传递参数,指定启用特性、安装路径等,执行时会参考用户的指定以及Makefile.in文件生成makefile
2)检查各特性所依赖到的外部环境,如依赖关系未被找到,则configure会报错
make
根据makefile文件,构建应用程序
make install
二、使用
1.开发工具
autoconf:生成configure脚本
sutomake:生成Makefile.in
# 建议安装前查看INSTALL,README
2.编译C源代码
前提:提供开发工具及开发环境
开发工具:make,gcc等
开发环境:开发库,头文件(glibc:标准库)
通过“包组”提供的开发组件
CentOS 7
[root@wybaron_host1015 ~]# yum grouplist "Development Tools"
...
可用组:
开发工具
完成
CentOS 6
[root@wybaron-host1005 ~]# yum grouplist "Development Tools" "Server Platform Development"
...
有效的组:
开发工具
服务器平台开发
完成
# 注:CentOS 6是“Development Tools”“Server Platform Development”;Centos7只有“开发工具”
3.编译环境搭建(CentOS 7为例)
[root@wybaron_host1015 ~]# yum groupinstall "开发工具" -y
...
已安装:
autoconf.noarch 0:2.69-11.el7 automake.noarch 0:1.13.4-3.el7
bison.x86_64 0:3.0.4-1.el7 byacc.x86_64 0:1.9.20130304-3.el7
cscope.x86_64 0:15.8-10.el7 ctags.x86_64 0:5.8-13.el7
diffstat.x86_64 0:1.57-4.el7 doxygen.x86_64 1:1.8.5-3.el7
flex.x86_64 0:2.5.37-3.el7 gcc.x86_64 0:4.8.5-28.el7_5.1
gcc-c++.x86_64 0:4.8.5-28.el7_5.1 gcc-gfortran.x86_64 0:4.8.5-28.el7_5.1
git.x86_64 0:1.8.3.1-14.el7_5 indent.x86_64 0:2.2.11-13.el7
intltool.noarch 0:0.50.2-7.el7 libtool.x86_64 0:2.4.2-22.el7_3
patch.x86_64 0:2.7.1-10.el7_5 patchutils.x86_64 0:0.3.3-4.el7
rcs.x86_64 0:5.9.0-5.el7 redhat-rpm-config.noarch 0:9.1.0-80.el7.centos
rpm-build.x86_64 0:4.11.3-32.el7 rpm-sign.x86_64 0:4.11.3-32.el7
subversion.x86_64 0:1.7.14-14.el7 swig.x86_64 0:2.0.10-5.el7
systemtap.x86_64 0:3.2-8.el7_5
作为依赖被安装:
avahi-libs.x86_64 0:0.6.31-19.el7 cpp.x86_64 0:4.8.5-28.el7_5.1
dwz.x86_64 0:0.11-3.el7 efivar-libs.x86_64 0:31-4.el7
gettext-common-devel.noarch 0:0.19.8.1-2.el7 gettext-devel.x86_64 0:0.19.8.1-2.el7
glibc-devel.x86_64 0:2.17-222.el7 glibc-headers.x86_64 0:2.17-222.el7
gnutls.x86_64 0:3.3.26-9.el7 kernel-debug-devel.x86_64 0:3.10.0-862.14.4.el7
kernel-headers.x86_64 0:3.10.0-862.14.4.el7 libgfortran.x86_64 0:4.8.5-28.el7_5.1
libgnome-keyring.x86_64 0:3.12.0-1.el7 libmpc.x86_64 0:1.0.1-3.el7
libquadmath.x86_64 0:4.8.5-28.el7_5.1 libquadmath-devel.x86_64 0:4.8.5-28.el7_5.1
libstdc++-devel.x86_64 0:4.8.5-28.el7_5.1 m4.x86_64 0:1.4.16-10.el7
mokutil.x86_64 0:12-2.el7 mpfr.x86_64 0:3.1.1-4.el7
neon.x86_64 0:0.30.0-3.el7 nettle.x86_64 0:2.7.1-8.el7
pakchois.x86_64 0:0.4-10.el7 perl-Error.noarch 1:0.17020-2.el7
perl-Git.noarch 0:1.8.3.1-14.el7_5 perl-TermReadKey.x86_64 0:2.30-20.el7
perl-Thread-Queue.noarch 0:3.02-2.el7 perl-XML-Parser.x86_64 0:2.41-10.el7
perl-srpm-macros.noarch 0:1-8.el7 subversion-libs.x86_64 0:1.7.14-14.el7
systemtap-client.x86_64 0:3.2-8.el7_5 systemtap-devel.x86_64 0:3.2-8.el7_5
trousers.x86_64 0:0.3.14-2.el7
作为依赖被升级:
libgcc.x86_64 0:4.8.5-28.el7_5.1 libgomp.x86_64 0:4.8.5-28.el7_5.1
libstdc++.x86_64 0:4.8.5-28.el7_5.1 systemtap-runtime.x86_64 0:3.2-8.el7_5
完毕!
4.编译详细步骤
4.1)configure脚本
选项的作用:用于指定安装位置、指定启用特性等。
--help 获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE 指定默认安装的位置(默认为/usr/local/)
--sysconfdir=/PATH/TO/SOMEWHERE 指定配置文件的安装位置
System types(系统类型):
Optional Features(可选特性)
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages(可选包)
--with-PACKAGE[=ARG]
--without-PACKAGE
4.2)make
4.3)make install
安装后配置:
A)导出二进制程序目录至PATH环境变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
B)导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中
让系统重新生成缓存
ldconfig [-v]
C)导出头文件
基于链接的方式实现: ln -sv
D)导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH
三、补充
开源程序源代码的获取
官方自建站点
http://apache.org/
https://mariadb.org/
...
代码托管
https://sourceforge.net/
https://github.com/
https://gitee.com/
...