Ubuntu(Linux)下如何用源码文件安装软件
在Ubuntu中附带了丰富的软件,这些软件一般使用图形化的自动方式(“添加/删除”或“新立得”)即可轻松安装,但是对于那些刚刚问世的新软件,Ubuntu的源中还未收录其中,这时我们就需要用到一种更通用的安装方式:通过手工方式从源文件来安装这些软件。下面就介绍这种手工安装方式的详细步骤。
一、 安装编译程序
因为要编译源代码,所以第一步就是安装编译和构建之类的程序。如果你已经安装过了,可以跳过此步。在Ubuntu系统中非常简单,只要执行下面命令就行了:
$ sudo apt-get install build-essential
该命令执行后,从源文件安装软件所需的工具,如gcc、make、g++及其他所需软件就安装好了。
二、下载并编译软件的源代码
当我们下载源文件时,一定要弄清该软件所依赖的库文件和其他程序,并且首先将它们装好。这些信息,通常都能在该开源项目的主页上查找到。做好这些准备工作后,我们就可以进行下面的工作了。因为,软件的源代码通常以压缩文件形式发布,所以需要将其解压到指定目录。命令如下所示:
OwnLinux@ubuntu:~$ tar xvzf
program.tar.gz
OwnLinux@ubuntu:~$ cd
program/
如果你的对tar命令不熟悉请点击这里阅读《tar命令详解》
在Linux下从源文件安装程序时,有一个通用模式,即配置(。/configure)–> 编译(make) –> 安装(sudo make install)。但是,此前你最好还是阅读源文件中附带的安装说明,因为对于每个程序,其开发者的指示才是最具权威性的。程序开发者通常将安装说明存放在名为INSTALL或README.到哪里找这些文件呢?它们在项目主页或源代码主目录中都能找到。
1.配置
构建应用的第一步就是执行configure脚本,该脚本位于程序源文件的主目录下:
OwnLinux@ubuntu:~/program$ ./configure
该脚本将扫描系统,以确保程序所需的所有库文件业已存在,并做好文件路径及其他所需的设置工作。如果程序所需的库文件不完全,该配置脚本就会退出,并告诉您还需要哪些库文件或者是哪些版本太旧需要更新。如果遇到这种情况,仅弄到含有该库文件的软件包还是不够的,同时还要找到具有该库文件所有头文件的开发包,在Ubuntu中,这样的包一般以-dev作为文件名的结尾。安装好所有需要的库文件后,重新运行配置脚本,直到没有错误提示为止,这说明需要的库文件已经全部安装妥当了即满足了依赖关系。
2.编译
当配置脚本成功退出后,接下来要做的就是编译代码了。具体操作为在源文件的主目录中运行make命令:
OwnLinux@ubuntu:~/program$ make
这时,您会看到一串编译输出数据迅速从屏幕上滚过,如果正常的话,系统会返回的提示符状态。然而,如果编译过程中出现错误的话,排错的过程可就不像配置步骤那么简单了。因为,这通常要涉及到源代码的调试,可能源代码有语法错误,或其他错误等等。怎么办?如果您是编程高手,那就自己调试吧!否则,检查该软件的邮件列表等支持渠道,看看是不是已知的bug,如果是就看看别人是怎么解决的,不是就提交一份bug报告吧,也许不久就会有解决办法。
3.安装
当软件成功编译后,最后一步就是将它们安装到系统上。大部分程序的makefile文件中都会有一个用于安装的函数。需要注意的是,大多时候我们必须作为 root用户来安装程序,这样程序就把文件安装到/usr或其他只有超级用户才有写权限的目录中。依旧是在源文件的主目录下,执行如下命令:
OwnLinux@ubuntu:~/program$ sudo make install
好了,这样程序就会安装到您的计算机上了。另外,当您不再使用该程序时,可以使用软件所带的卸载功能,一般程序都会具备此功能。切换至源文件的主目录下,执行以下命令即可:
OwnLinux@ubuntu:~/program$ sudo make uninstall
多数情况下,利用上面介绍的方法安装的程序,都位于/usr/local下面。若想让安装的程序文件与Ubuntu巡视的文件系统隔离开的话,可以为命令添加项,如下所示:
OwnLinux@ubuntu:~/program$ ./configure –prefix=/opt
尽管这样做一般都是有效的,但是也有例外,有些程序根本不理会项;有些程序如含有内核模块的程序,会把它们自己全部放进您的文件系统。
上面介绍的手工安装软件的方法虽然是针对Ubuntu环境来介绍的,但是各种Linux系统下的从源文件安装应用的方法基本上都大同小异。
Ubuntu(Linux)下如何用源码文件安装软件的更多相关文章
- rt.jar包添加源文件只需要关联到已安装对应jdk目录下source.zip源码文件即可
项目中配置的JRE System Libriry下的rt.jar包,需要关联源文件时候,只需要点击“Attach Source...“按钮,选择"External File..." ...
- ubuntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立
http://blog.csdn.net/embbnux/article/details/17616809
- Go源码文件与命令
Go源码文件 文件类型 命令源码文件 : 声明自己属于main包且包含main函数的源码文件,一个包里边不要有多个命令源码文件,虽然用go install ,go run单独执行命令源码文件没有问题, ...
- [C/C++] 各种C/C++编译器对UTF-8源码文件的兼容性测试(VC、GCC、BCB)
在不同平台上开发C/C++程序时,为了避免源码文件乱码,得采用UTF-8编码来存储源码文件.但是很多编译器对UTF-8源码文件兼容性不佳,于是我做了一些测试,分析了最佳保存方案. 一.测试程序 为了测 ...
- 《UNIX网络编程(第3版)》unp.h等源码文件的编译安装
操作系统:Mac OS X 10.11.5 1.下载书中的源代码:点击下载 2.切换到解压后的目录 unpv13e,先查看下 README,依次执行: ./configure cd lib make ...
- ubuntu linux 下wine的使用
ubuntu linux 下wine的使用 之前写了一篇 ubuntu15.10下编译安装wine1.8rc4 这一篇是来写它的使用的. 1.安装Wine支持包 现在,需要安装非开源(但免费)的支持包 ...
- Erlang千万级用户游戏框架(Openpoker)源码文件分析清单
openpoker源码 erlang写的网游服务器源码,OpenPoker是一个大型多人扑克网游,内建支持了容错能力,负载平衡和无限制的规模大小.本文是openpoker源码文件功能的一个清单式说明: ...
- Python源码文件中带有中文时,输出乱码
Python源码文件中带有中文时,文件头应加注释: #!/usr/bin/env python # -*- coding: utf-8 -*- 第一行注释是为了告诉Linux/OS X系统,这是一个P ...
- go语言的源码文件的分类及含义
Go源码文件:名称以.go为后缀,内容以Go语言代码组织的文件 多个Go源码文件是需要用代码包组织起来的 源码文件分为三类:命令源码文件.库源码文件(go语言程序) 测试源码文件(辅助源码文件) 命令 ...
随机推荐
- .NET作品集:linux下的博客程序
博客程序架构 本博客程序是博主11年的时候参考loachs小泥鳅博客内核开发的.net跨平台博客cms,距今已有6年多了,个人博客网站一直在用,虽然没有wordpress那么强大,但是当时在深究.ne ...
- php结合redis实现秒杀功能
<?php 第一种,简单实现 $conn=mysql_connect("localhost","big","123456"); if( ...
- python学习之路day1
学习总结: 变量,字符的由来,python2和python3的区别,控制语句:if,for,while,break,continue用法 学习示例: if用法1:判断年龄 # -*- coding: ...
- macbookPro 搭建maven环境下载jar包
今天要用itext的jar包,去官网看发现好像只能用maven下载,而我之前又换了电话,没办法咯,重新搭一次maven环境吧,在此记录,已便分享或自己将来查找 首选确定自己环境上jdk装好了,如果没有 ...
- 第三节:Creating API Endpoints (创建API路由)
对于这篇文章的标题,其实,直译就是创建api端点.但是,真的很难懂,我还是写为API路由吧.每篇,文章,我都会全部去进行实践操作,力求写一个好点的教程. 本文英文地址-->https://git ...
- ssm开发使用redis作为缓存,使用步骤
1.关于spring配置文件中对于redis的配置 <!-- redis配置 --> <bean id="jedisPoolConfig" class=" ...
- Linux 网络编程中的read和write函数正确的使用方式
字节流套接字上的read和write函数所表现的行为不同于通常的文件IO,字节流套接字上调用read和write输入或输出的可能比请求的数量少,然而这不是出错的状态,例如某个中端使read和write ...
- 【JDK1.8】JDK1.8集合源码阅读——ArrayList
一.前言 在前面几篇,我们已经学习了常见了Map,下面开始阅读实现Collection接口的常见的实现类.在有了之前源码的铺垫之后,我们后面的阅读之路将会变得简单很多,因为很多Collection的结 ...
- 》》mui--图片轮播
mui框架内置了图片轮播插件,通过该插件封装的JS API,用户可以设定是否自动轮播及轮播周期,如下为代码示例: //获得slider插件对象 var gallery = mui('.mui-slid ...
- django序列化时使用外键的真实值
展示: 普通情况下序列化得到的外键的内容仅仅是id: ... { fields: { uat_date: "2015-07-25", statu: "CG", ...