Linux 如何安装程序的源代码软件包/源码程序包/源码包?
文章目录
- 一、安装源码包的三个步骤
- (一)执行命令 configure,进行配置/检测
- (二)执行命令 make,编译源码
- (三)执行命令 make install,安装软件
- 二、源码包安装示例
- (一)下载源码包
- (二)解压源码包
- (三)配置相关的选项,并生成 Makefile
- (四)进行编译
- (五)进行安装
安装一个源码包,需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自己修改源代码外还可以定制额外的功能,因为源码包在编译的时候是可以附加额外的选项的。
源码包的编译用到了 Linux 系统里的编译器,常见的源码包一般都是用 C 语言开发的。Linux 上的 C 语言编译器叫做 gcc,利用它就可以把C 语言变成可执行的二进制文件。所以如果你的机器上没有安装 gcc 就没有办法去编译源码。你可以使用 yum install -y gcc
来完成安装。
一、安装源码包的三个步骤
(一)执行命令 configure,进行配置/检测
源码程序包解压后,进入软件包根目录下,然后执行命令 ./configure
,在这一步可以定制功能,加上相应的选项即可,有哪些选项可以选择,你可以通过 ./configure --help
命令来查看。在这一步会自动检测你的 Linux 系统和相关的套件是否有编译该源码包时需要的库,因为一旦缺少某个库就不能完成编译。只有检测通过后会生成一个 Makefile
文件。
(二)执行命令 make,编译源码
make
使用这个命令会根据 Makefile
文件中预设的参数进行编译,这一步其实就是 gcc 在工作了。
(三)执行命令 make install,安装软件
执行命令 make install
开始安装步骤,这是一个生成相关的软件存放目录和配置文件的过程。
上面介绍的三步并不是安装任何源码包软件都一样的,也就是说源码包的安装并没有标准的安装步骤。具体安装步骤,你可以拿到源码包解压后,进入到目录找相关的帮助文档查看,帮助文档通常会以 INSTALL 或者 README 命名。所以,你一定要去看一下。
二、源码包安装示例
下面笔者会编译安装一个源码包来帮你更深刻的去理解如何安装源码包。
(一)下载源码包
这里要提一下,建议以后你把所有下载的源码包放到 /usr/local/src/
目录下,这个并不是必须的,只是一个约定。方便你和你的同事将来更好的去运维这台服务器。wget 即为下载的命令,后边跟源码包的下载地址。该地址为笔者从网上找的一个 apache 的下载地址。
(二)解压源码包
一般的源码包都是一个压缩包。
(三)配置相关的选项,并生成 Makefile
使用 ./config --help
可以查看可用的选项。一般常用的有 --prefix=PREFIX
这个选项的意思是定义软件包安装到哪里。到这里,笔者再提一个小小的约定,通常源码包都是安装在 /usr/local/
目录下的。比如,我们把 apache 安装在 /usr/local/apache2
下,那么这里就应该这样写 --prefix=/usr/local/apache2
。其他还有好多选项,如果你有耐心你可以挨个去看一看都有什么作用。
笔者在这里只定义了 apache 的安装目录,其他都是默认。回车后,开始执行 check 操作。
等 check 结束后生成了 Makefile 文件。
除了查看有没有生成 Makefile 文件来判定有没有完成 ./config
的操作外,还可以通过这个命令 echo $?
来判定,如果是 0,则表示上一步操作成功完成,否则就是没有成功。
(四)进行编译
这一步操作,就是把源代码编译成二进制的可执行文件,这一步也是最漫长的一步,编译时间的长短取决于源代码的多少和机器配置。
执行命令 echo $?
确认编译操作是否成功。
(五)进行安装
make install
会创建相应的目录以及文件。当完成安装后,会在 /usr/local
目录下多了一个 apache2
目录,这就是 apache 所安装的目录了。
其实在日常的源码安装工作中,并不是每个都像笔者这样顺利完成安装的,遇到错误不能完成安装的情况是很多的。通常都是因为缺少某一个库文件导致的。这就需要你仔细琢磨报错信息或者查看当前目录下的 config.log
去得到相关的信息。另外,如果自己不能解决那就去网上google 一下吧,通常你会得到你想要的答案。
Linux 如何安装程序的源代码软件包/源码程序包/源码包?相关推荐
- Linux下安装、卸载软件/软件包管理——Yum
Linux下软件安装 1.源码安装 2.rpm安装 注:可能存在大量的软件之间的依赖关系,安装比较麻烦,所以不推荐1 .2方式 3.yum:本身会考虑依赖关系 相当于手机里边的软件商店/应用市场 y ...
- rad linux下安装mysql_Linux(CentOS或RadHat)下MySQL源码安装
MySQL 5.6开始,需要使用g++进行编译. cmake :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本. bison :MySQL语法解析器需要使用bis ...
- linux软件安装之详解apt、yum、dnf 和 pkg包安装
介绍 包管理系统除了安装软件外,它还提供了工具来更新已经安装的包.包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可. 在配置服务器或开发环境时 ...
- linux子系统安装gromacs,科学网—Windows下GROMACS程序的编译 - 李继存的博文
2015-12-07 22:12:05 总的来说, Windows下的GROMACS程序用于模拟意义不大, 对于长时间的模拟, 我都是放在Linux服务器上进行的. 但将Windows下的GROMAC ...
- centos7镜像加速_虚拟机 Linux CentOS7 安装Docker 详解:使用 阿里云Yum源;附加云镜像加速器...
Docker 要求 CentOS 系统的内核版本高于 3.10 ,先检查一下,如内核版本不符合,不建议参考该贴安装!(CentOS版本 大于7.0以上版本,一般都可以:建议先查询系统内核版本) 如系统 ...
- kali 2020.3中安装pyrit无法定位软件包
kali linux中安装pyrit无法定位软件包 转载自:https://blog.51cto.com/14834110/2502725 E:无法定位软件包pyrit 解决办法: 修改更新源 vim ...
- linux中安装samba的方法以及注意事项
linux中安装软件的方法有很多种:1. 用rpm包直接进行安装(rpm -ivh package):2.yum安装:3.apt-get等. 如果能够联网,用apt-get是最简单的方法.但如果无法联 ...
- CH340系列Linux驱动安装
CH340系列Linux驱动安装 如需转载请标明出处:http://blog.csdn.net/itas109 技术交流:129518033 环境: 系统:Ubuntu 20.04 linux内核版本 ...
- Linux下安装Redis及搭建主从
Linux下安装Redis 首先在官网下载对应版本的redis包,这里本人使用的是redis-4.0.8.tar.gz. 然后在服务器中存放redis包的路径下执行tar –vxf redis-4 ...
最新文章
- Android报错:java.lang.NoClassDefFoundError: Failed resolution of: Ljava/util/Base64;如何解决
- Vue搜索框保存临时搜索的记录
- 中国IT潜在的巨大希望
- 华为对边缘计算的思考与理解
- win7/IE8无法加载QCbin的插件
- 老大难的 Java ClassLoader,到了该彻底理解它的时候了
- boost::phoenix模块使用 BLL 和 boost::function 进行测试
- 嵌入式开发中,用C++真香!
- EasyDSS高性能流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载 - 副本...
- 玩Linux碰到的问题以及使用技巧总结
- Python pip install 包后,pycharm仍然提示No module named(提示 No module named ‘pip‘)
- python+opencv 问题解决方案,OpenCV Error: Unspecified error (The function is not implemented. Rebuild the
- 深搜和广搜--原理彼此的优缺点
- autojs- 联众识别
- qt视频教程qt入门教程嵌入式linux应用开发qt编程开发,QT项目实战教程-Qt应用项目实例开发视频教程...
- 计划超越苹果!诺基亚在印度推出笔记本电脑
- Oracle与MySQL的SQL语句区别
- Tensorboard启动时面对大量文件存在内存升高问题
- 天下码农苦外包公司久矣
- 网络安全-文件上传漏洞的原理、攻击与防御
热门文章
- jsf 项目_您将在下一个项目中使用JSF吗?
- 性能测试中脚本怎么写_脚本在流程中的性能影响
- 终端查看命令有哪些功能命令_从命令式功能到纯粹功能式功能,再返回:Monads与范围内的延续...
- dot2谜团png_一个类加载的谜团解决了
- Java中的策略设计模式
- 使用Apache JMeter负载测试Web应用程序
- 使用Prometheus和Grafana监视开放自由
- 跑来跑去:假人与AWS Lambda的第一次接触
- junit mockito_JUnit和Mockito合作
- java设计模式迭代器模式_迭代器模式和Java