Linux 应用程序的源码包如何安装?

文章目录

  • configure
  • make
  • make install
  • 关于文件 configure 的简单介绍
  • 其它命令简介

C 语言开发的应用程序的源码包常以 .tar.gz 为扩展名,并且这些源码包通常使用 GNU 的 AUTOCONF 和 AUTOMAKE 生成编译配置文件,我们拿到这样的软件包后,执行下面的安装三部曲就可以完成安装了。

想要了解 AUTOCONF 和 AUTOMAKE 这两个东西到底是干什么的,猛戳此链接:https://www.zhihu.com/question/22644913

configure

你需要进入到源码包的根目录中,再执行这个命令,该命令会对你的系统进行编译环境检测,并且会生成符合 GNU 规范的文件 Makefile,为下一步的编译做准备,你可以通过加上参数来对安装进行控制,比如代码:

./configure –prefix=/usr 

说明:
执行命令 configure 必须要指明具体的路径,该指令文件在源码包的根目录下,所以指定相对路径 ./configure 就可以执行了,为什么要指定具体的路径?因为系统根本不知道你的指令文件在哪里,那些不要你指明具体路径就可以直接执行的指令是因为这些指令文件所在目录早已配置到环境变量 PATH 中了,但是你下载的源码包的根目录根本不在环境变量 PATH 中,所以当然需要你自己指明才行。

–prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的 /usr/local/share)。具体可以使用哪些选项,你可以通过 ./configure --help 察看详细的帮助说明。

make

这一步就是编译,大多数的源代码包要通过这一步进行编译(当然有些 perl 或 python 编写的软件需要调用 perl 或 python 来进行编译)。如果在 make 过程中出现 error ,你就要记下错误代码,然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),也可能是你的系统少了一些依赖库导致的错误,这些需要自己仔细研究错误代码。

比如错误提示:

make: *** 没有指明目标并且找不到 Makefile。 停止。

问题很明了,没有 Makefile,怎么办,原来是要先 ./configure 一下,再执行编译命令 make

make install

这条命令用来进行安装程序的,当然有些软件需要先运行 make checkmake test 来进行一些检测,这一步一般需要你有 root 权限(因为要向系统写入文件)。安装成功后通常你还可以执行 make clean 删除一些临时文件。

如果用 bin_PROGRAMS 宏的话,程序会被安装至 /usr/local/bin 这个目录。

关于文件 configure 的简单介绍

文件 configure 是一个 shell 脚本,AUTOCONF 和 AUTOMAKE 就是用来生成文件 configure 的。这个脚本文件可以自动设定源程序以符合各种类 Unix 操作系统的特性,并且根据系统变量及环境产生合适的 Makefile 文件或是 C 的头文件(header file),让源代码程序可以很方便地在这些不同的系统上被编译连接。

其它命令简介

  1. make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。
  2. make distclean:除了清除可执行文件和目标文件外,把 configure 所产生的 Makefile 也清除掉。
  3. make dist:将程序源代码和相关的档案压缩打包成一个压缩文件以供发布。执行完在目录下会产生一个以 PACKAGE-VERSION.tar.gz 为名称的文件。 PACKAGEVERSION 这两个变量是根据 configure.in 文件中 AM_INIT_AUTOMAKE(PACKAGE,VERSION) 的定义。
  4. make distcheck:和 make dist 类似,使用该命令完成压缩后会去检测压缩文件是否正常。也就是说该命令除了会把程序的源代码和相关文件压缩打包成 .tar.gz 文件外,还会自动把这个压缩文件解开,执行 configure,并且进行 make 的动作,确认编译无误后,会显示这个 .tar.gz 文件可供发布了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

exec su-exec_WildFly Kubernetes exec探针

exec su-exec活动性和就绪性探针会告诉Kubernetes,某个Pod是否正在运行并准备进行一些工作。 企业应用程序可以通过HTTP探测应用程序的状态。 如果没有暴露HTTP端点,Kubernetes也可以通过执行命令进行探测。 WildFly附带了有用的jboss-cli.sh 。 此CLI检…

feignclient注解使用_从 Feign 使用注意点到 RESTFUL 接口设计规范

最近项目中大量使用了Spring Cloud Feign来对接http接口,踩了不少坑,也产生了一些对RESTFUL接口设计的想法,特此一篇记录下。SpringMVC的请求参数绑定机制了解Feign历史的朋友会知道,Feign本身是Netflix的产品,Spring …

Linux 的发行版 Ubuntu 的发展简史

Ubuntu(又称乌班图)是一个是基于 Debian GNU/Linux 的以桌面应用为主的免费开源的 GNU/Linux 操作系统,由全球化的专业开发团队 Canonical 公司打造的。 Ubuntu Linux 是由南非人马克沙特尔沃思(Mark Shuttleworth)创办的基于 Debian Linux的…

linux实验报告五gcc编译,Linux之GCC命令 -- 解析GCC编译的四个过程

在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序。Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]。其中,目标文件可缺省,Gcc默认生成可执行的文件名为:编译文件.out看一下经典…

python创建虚拟环境命令_Python创建虚拟环境报错

我使用命令:mkvirtualenv -p python3 test1,创建虚拟环境,然后报错如下(),虚拟机是用nat模式的: Exception: Traceback (most recent call last): File "/home/python/.virtualenvs/test11/share/python-wheels/urllib3-1.13.1-py2.py3-…

java7和java8切换_切换表达式到Java吗?

java7和java8切换已创建一个标题为“ Java语言的开关表达式”的JEP草案 。 当前的“摘要”状态为:“扩展switch语句,以便可以将其用作语句或表达式,并改善switch处理null的方式。 这些将简化日常编码,并为在switch使用模式匹配做好…

Xenix 操作系统的简史

简介 Xenix 是一种UNIX操作系统,可在个人电脑及微型计算机上使用。该系统由微软公司在1979年从美国电话电报公司获得授权,为Intel处理器所开发。后来,圣克鲁兹作业公司(SCO)收购了其独家使用权,自那以后&a…

servlet 配置 使用_配置HTTPS以与Servlet一起使用

servlet 配置 使用要配置Java EE应用程序以通过HTTPS进行通信,需要在web.xml文件中使用几行XML。 web.xml文件位于项目的WEB-INF目录中,通常在IDE生成Java EE Web应用程序时自动创建。 如果不是,您可以自己创建它。 HTTPS的动机 为Web应用程…

python写接口测试代码_python写运单接口测试(增改查)完整代码

importrequestsimportjsonfrom urllib importparseclassHttpWayBillRquest:运单的增改查 defaccess_token(self):获取tokenurl http://xxxxxxxxx.comusername 12333password 12334566res_json requests.get(url, auth(username, password)).json()print(access_token的结果为&a…

linux终端cd未找到命令,为什么`which`命令不能用于`cd`?我也找不到`cd`的可执行文件!...

问题描述我尝试了which cd,它没有给出路径,而是返回退出代码1(用echo $?检查)。 coreutil cd本身正在工作,所以可执行文件应该在那里,对吧?我还为cd运行了find,但没有显示可执行文件。那怎么实现呢&#x…

Xenix — 微软与UNIX的短暂爱恋

微软向外宣布Microsoft Xenix OS,一个为16位微处理器开发的可移植的操作系统。它是一个交互的,多用户多任务系统,可以运行在Intel 8086, Zilog Z8000, Motorola M68000以及DEC公司的PDP-11系统计算机上。所有微软已经开发的系统软件&#xff…

optionals_Java Optionals获得更具表现力的代码

optionals我们中任何使用允许空引用的语言进行编程的人,都将在尝试取消引用一个引用时经历过。 无论是导致segfault还是NullPointerException,它始终是一个错误。 托尼霍尔将其描述为他十亿美元的错误 。 当函数向客户端的开发人员未预料到的客户端返回空…

python排序sorted_sorted排序的两个方法 - Python

在给列表排序时,sorted非常好用,语法如下: sorted(iterable[, cmp[,key[,reverse]]]) 简单列表排序,很容易完成,sorted(list)返回的对象就是列表结果,但是遇到列表中嵌套元组时,需要使用特殊的方…

linux vim自动执行快捷键,Linux Vim快捷键操作命令整理

VIM中常用的替换模式总结1,简单替换表达式替换命令可以在全文中用一个单词替换另一个单词::%s/four/4/g“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可如果…

Mach 微内核的命名趣闻

据 Tevanian 说,MACH,源于一个读音错误。当时他正和其他人在匹兹堡一个下雨天里一边躲避着路上的泥水坑,一边讨论着新内核的事,Tevanian开玩笑地建议他们的新微核命名为MUCK,意为“多用户通信内核”(Multi-…

eclipse占用内存过大_Java性能调优学习(三)-jmap+mat分析内存溢出问题实战

上一节我们讲了jinfo,jstat,jmap的使用,还简单的讲了下如何使用jmap导出内存映像文件,这次,我们来实战一把内存溢出问题。环境准备首先我们先模拟一下内存溢出的场景,以下这段代码在访问后肯定会造成堆内存…

spring boot自测_将测微仪与Spring Boot 2一起使用

spring boot自测这是快速入门,介绍了如何使用出色的Micrometer库来检测基于Spring Boot 2的应用程序并在Prometheus中记录指标 介绍 Micrometer在不同监视工具提供的客户端库上提供了基于Java的外观。 以Prometheus为例,如果我要将Java应用程序与Prome…

arch linux界面优化,Archlinux 启动优化

内核参数优化修改/boot/grub/grub.cfg 添加libahci.ignore_sss1 #禁用sssraidnoautodetectipv6.disable1 #禁用ipv6nomodeset #不使用kms,plymouth.enable0 #禁用plymouthrootfstypeext4 #root分区类型selinux0#禁用selinux 完成后:linux /vmlinuz-lin…

微软和 Windows 的发展简史

20世纪60年代中期,美国达特茅斯学院院长、匈牙利人约翰凯梅尼(J. Kemeny)和数学系教授托马斯卡茨(Thomas E. Kurtz)认为,像FORTRAN(世界上最早出现的计算机高级程序设计语言)那样的语…

elaseticsearch 配置ik分词器的热更新_Elasticsearch从入门到放弃:分词器初印象

Elasticsearch 系列回来了,先给因为这个系列关注我的同学说声抱歉,拖了这么久才回来,这个系列虽然叫「Elasticsearch 从入门到放弃」,但只有三篇就放弃还是有点过分的,所以还是回来继续更新。之前我们聊过了 Elasticse…