linux源码编译安装软件原理
一.关于软件包
在linux中安装软件是需要安装包的,软件的安装包有各种类型:.zip,.rar,.rpm,.tar.gz,.tar。软件包还可以分为源代码包和二进制
包,源代码包是没有经过编译的包,需要经过GCC、C++编译器环境编译才能运行。二进制包无需编译,可以直接安装使用。区分是否为
源代码包还是二进制包还得基于软件包里面的文件来判断,包含.h、.c、.cpp、.cc等结尾的源码文件,称之为源代码包,而软件包里面存
在bin目录(bin目录里有可执行文件),称之为二进制包。源码包高度可定制,可以自由选择自己需要的功能。
二.软件编译过程
1.将源码编译成可供Linux运行的二进制文件一共需要两步:
- 使用gcc编译器将源码编译成目标文件
- 再次使用gcc编译器将目标文件链接成二进制文件
这过程看似简单,实则不然。一个软件的源代码往往被封装在多个源文件中,此外这些文件有错综复杂的依赖关系,编译需要严格按照指
定的顺序进行,这无疑增加了编译的难度。好在make命令可以帮助我们简化编译过程。整个编译过程被浓缩在Makefile文件中(告诉
make命令需要怎么去编译和链接程序),当执行make命令时,make会去当前目录中寻找Makefile文件,并根据该文件中的要求完成整个
编译过程。而Makefile文件由configure命令产生。当执行configure命令时,configure会根据当前系统环境动态生成一个适合本系统的
Makefile文件,供make命令使用。
2.Linux源码安装步骤
- 获取源码并解压
- 查看INSTALL与README文件:解压后查看INSTALL与README文件,这两个文件中详细介绍了软件的安装方法和注意事项
- 创建Makefile文件:执行configure命令,生成Makefile文件
- 编译:执行make clean;make命令将源码编译成二进制文件。PS:make clean命令用来清除上一次编译生成的目标文件,这个步骤可有可无,但为了确保编译的成功,还是加上为好,防止由于软件中含有残留的目标文件导致编译失败
- 安装:执行make install命令将上一步编译好的二进制文件安装到指定的目录中去
三.编译安装常用参数
# ./configure
a. 指定安装路径,例如 --prefix=/usr/local/nginx
b. 启用或禁用某项功能, 例如 --enable-ssl, --disable-filter --with-http_ssl_module
c. 和其它软件关联,例如--with-pcre
d. 检查安装环境(检查依赖到的外部环境),例如是否有编译器gcc,是否满足软件的依赖需求
最终生成:Makefile
# make -j 4 #按Makefile文件编译,可以使用-j 4指定4核心CPU编译,提升速度
# make install #按Makefile定义的文件路径安装
# make clean #清除上次的make命令所产生的object和Makefile文件。使用场景:当需要重新执行configure时,需要执行make clean
#make uninstall #删除安装包,有时删除不干净,所以建议大家安装时,在configure步骤添加一个: --prefix 参数。这样删除或备份时,直接对删除--prefix指定的安装目录操作就可以了。
四.源码编译出错的解决思路
1.首先编译软件需要各种编译器,各种依赖包,编译之前先安装软件的依赖包能减少出错。注意查看INSTALL与README文件,这两个文
件详细介绍了软件的安装方法和注意事项;
2.根据./configure的报错信息来解决问题,缺少依赖包就安装依赖包。如果知道缺少依赖软件名,但是不知道依赖包,可以使用yum
search 软件名,查看属于哪个依赖包,然后安装;
3.可以使用http://www.rpmseek.com/index.html查找需要的软件。
五.各种软件安装方法的特点
- 使用yum 或者rpm直接安装软件:操作方便,软件版本低(稳定版),稳定性好,管理方便,性能稍差;
- 源码编译安装软件:操作麻烦,软件版本新,可以定制,稳定性稍差,管理稍差,性能好。
linux源码编译安装软件原理的更多相关文章
- Linux 源码编译安装软件
程序包编译安装的步骤: 源代码-->预处理-->编译-->汇编-->链接-->执行 多文件:文件中的代码之间,很可能存在跨文件依赖关系 1.编译源码的项目工具 使用相关的 ...
- Linux源码编译安装httpd
Linux安装软件采用源码编译安装灵活自由,适用于不同平台,维护也十分方便. 源码编译的安装方式一般由3个步骤组成: 1.配置(configure) 2.编译(make) 3.安装(make inst ...
- linux源码编译安装OpenCV
为了尽可能保证OpenCV的特性,使用OpenCV源码编译安装在linux上.先从安装其依赖项开始,以ubuntu 14.04.X为例讲解在Linux上源码编译安装OpenCV,其他linux版本可以 ...
- Linux源码编译安装程序
一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在 ...
- Linux源码编译安装MySQL5.7
目录[-] 一.环境准备: 二.升级系统: 三.做一些准备工作(以下Linux命令均在su到root用户操作): 四.开始编译安装mysql-5.7.9: 一.环境准备: 我尝试过以下环境都是能成功的 ...
- Linux源码编译安装php7.2
以下简单的介绍下如何源码安装PHP,对于版本不一定是7.2,也可以是7.3,当然方法都是换汤不换药的,核心东西不变. 一.下载PHP源码 需要到指定的路径下载源码,执行下面的命令 wget http: ...
- 部署maria数据库到linux(源码编译安装)
maria数据库是mysql原作者另外开发的一个版本,使用方法和mysql一样,可以直接用mysql的库连接. 在这下载包并解压: https://mariadb.org/download/ 建立数据 ...
- linux源码编译安装php出现 cannot find -lltdl
原因: 在编辑php时添加的“–with-mcrypt”选项造成. 解决方法: 1.如果不需要mcrypt,那么编辑php时去掉该选项,然后再make.make install. 2.如果需要mcry ...
- 部署mariadb数据库到linux(源码编译安装)
各种库: apt install -y build-essential zlib1g-dev libpcre3 libpcre3-dev unzip cmake libncurses5-dev lib ...
- Linux源码编译安装php7.3
---恢复内容开始--- ps:一切从简 一.安装所需环境 yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel ...
随机推荐
- [一本通1681]统计方案 题解(Meet in mid与逆元的结合)
题目描述 小\(B\)写了一个程序,随机生成了\(n\)个正整数,分别是\(a[1]-a[n]\),他取出了其中一些数,并把它们乘起来之后模\(p\),得到了余数\(c\).但是没过多久,小\(B\) ...
- 深入了解 Golang 条件语句:if、else、else if 和嵌套 if 的实用示例
条件语句 用于根据不同的条件执行不同的操作.Go中的条件可以是真或假.Go支持数学中常见的比较运算符: 小于 < 小于等于 <= 大于 > 大于等于 >= 等于 == 不等于 ...
- HarmonyOS网络管理开发—Socket连接
简介 Socket连接主要是通过Socket进行数据传输,支持TCP/UDP/TLS协议. 基本概念 ● Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. ● ...
- Tailwind CSS 使用指南
0x01 概述 (1)简介 Tailwind CSS 官网:https://www.tailwindcss.cn/ Tailwind CSS 是一个 CSS 框架,使用初级"工具" ...
- jenkins 持续集成和交付 —— git hook(七)
前言 这个hook的意思叫做钩子哈,前端听得多. 正文 好吧,这个git hook 有什么用呢? 前面说了一个轮询SCM这个东西呢,我是真的觉得这东西没啥用,经常扫描仓储算怎么回事呢? 但是如果主动通 ...
- c# seo 百度sitemap书写
前言 我们知道对页面百度收录,有两种方式: 1.百度自己抓取. 2.自己提交sitemap让百度来抓取. sitemap 一般的一个业务逻辑是: 生成sitemap xml,然后每隔一段时间更新即可, ...
- 快速上手Linux核心命令
Linux 的重要性不用我多说了吧,大多数互联网公司,服务器都是采用的Linux操作系统 Linux是一个主要通过命令行来进行管理的操作系统. 只有熟练掌握Linux核心命令,在使用起来我们才会得心应 ...
- Gowin 1nr-9k mipi测试
本次实验是利用gowin 1nr-9k的开发板测试MIPI屏. 测试的屏是2.0寸的,接口如下: 接上IO就是RST和MIPI的时钟和数据接口,另外就是电源和地. Gowin的案例中,首先是软件要升级 ...
- esp8266,arduino,网页显示dht11温湿度,控制继电器开关,局域网智能家居
不说了,上代码,用arduino实现esp8266代码 #include <ESP8266WiFi.h> #include <WiFiClient.h> #include &l ...
- 使用pycuda替换字符串,使用cuda替换字符串
写一个python的cuda程序,实现字符串列表的字符串替换,把所有的123替换成xinyuuliu 以下是一个简单的 Python CUDA 代码示例,用于实现字符串列表的字符串替换.它使用了 NV ...