一、源代码简介(文件中的代码之间,很可能存在跨文件依赖关系)
源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。
二、源代码的编译过程
由于程序源代码到可被计算机识别并运行的指令是需要多步骤处理的:程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接。
这里以C,C++为例做为说明。程序员写完C,C++源代码后需要把源代码进行预处理,即通过预处理器把源代码分割或处理成为特定的符号用来支持宏调用。预处理后进一步通过编译器(gcc)编译为目标代码(object code),它由接近于机器语言的代码组成。目标代码通过编译器编译后才能生成可供CPU识别的机器代码、机器指令。由于C,C++在编写中大量调用了库文件,所以在编译后需要把源代码中使用到的库做好链接。形成能够依赖于共享库独立运行代码。
LINUX包的二进制应用程序一般包含(二进制文件、库文件、配置文件、帮助文件)。且在LINUX中二进制应用程序的组成部分为:
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
三、程序包编译安装的需求
在某些情况下,比如某个程序已经更新了新版本,但是因为官方或其他组织还没有编译成RPM包,而我们此时需要用到此新版本程序的功能,或者当官方提供的RPM包中因为集成了太多我们不需要的功能或缺少某些功能时。此时我们就需要考虑自己通过源代码编译安装成可供LINUX识别的二进制安装包。
但是要把源代码变成可执行的二进制文件需要以下过程:程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接。想到这里我们又不由自主的奔溃了。而且因为程序在开发中一般是使用模块开发的,所以文件中的代码之间,很可能存在跨文件依赖关系。所以为了方便用户能够自主编译源代码。所以有了项目管理器(make)。
四、编译安装三步骤
C、C++: make (configure --> Makefile.in --> makefile)
C代码编译安装三步骤:
前提:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
Centos 5,6,7通过“包组”提供开发组件
CentOS 6: "Development Tools", "Server Platform Development",
①、./configure:
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
(2) 检查依赖到的外部环境,如果此时依赖的外部环境没有配置,会导致报错。第一步报错会导致make不能执行
选项:指定安装位置、指定启用的特性 --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
②、make:
根据makefile文件,构建应用程序;
③、make install
把二进制文件、库文件、配置文件、帮助文件复制到对应的目录中
注意事项:
configure和Makefile.in是程序员通过两个工具生成并提供给我们使用的
开发工具:
autoconf: 生成configure脚本
automake:生成Makefile.in
建议:安装前查看INSTALL,README
开源程序源代码的获取:
官方自建站点:
apache.org (ASF)
mariadb.org
...
代码托管:
SourceForge
Github.com
code.google.com