tarball源码安装
软件最原始的安装方法 用tarball来安装升级
make命令
执行make ,会在当前路径下搜索makefile这个文本文件,这个文件中记录了源码如何编译的详细信息。
软件开发商通常会写一个检测程序,检测用户的操作系统环境,以及是否有编译过程的所需要的功能,比如需要的各种库,
检测完毕后,会主动新建makefile。检测程序就是configure或config,这其实是个shell脚本。
编译过程
1 执行configure脚本,这个脚本会去检测编译器,需要的函数库和其他资源,执行成功,生成makefile
2 make
注意:不同平台编译后的二进制程序放到其他平台可能不能执行成功。应为不同平台的函数库路径可能不同。所以需要需要重新编译,这一点不像windows那么方便了。
Tallball文件,就是将所有源码打成tar包,然后进行压缩。当然用的最多的压缩就是gzip压缩
本质就是软件的各种源码
软件更新
什么情况会要软件更新,或者说升级?
更新方式:
编译源码更新
直接以二进制程序安装更新 rpm yum
写makefile文件就得熟悉gcc的参数
编译其实是分四个阶段进行的
1 预处理 gcc -E test.c -o test.i 得到预处理后的文件.i,处理文件包含,宏定义
2 编译 gcc -S test.i -o test.s 得到汇编代码
3 汇编 gcc -c test.c -o test.o 得到目标文件
4 链接 gcc test.o -o test 将目标文件和附加所需要的目标文件链接起来,生成二进制
这是对一个程序文件,对多个源文件组成的,对每个文件过程是一样的。
有多个文件组成时,t1.c t2.c t3.c
如何编译最好?
先编译成目标文件,然后再用目标链接生成二进制文件。为什么这么做?
每个目标文件是一个模块,如果只修改了一个文件,只要重新编译这一个文件为目标文件,最后链接一下就好了,其他的模块完全不用动。
gcc -c test.c test2.c test3.c --> test.o test2.o test3.o
如果有十几个文件,这种在命令行下一个个文件的编译很不方便
大多数程序需要用外部函数库,也就有是文件中用到了标准库中的文件
gcc test.c -lm -L/lib -L/usr/lib
-l 表示加入函数库
m 表示libm.so这个库,-lm就是把libm.so这个库加进去链接
-Wall 编译时显示详细编译过程信息
当有十几个几十个的文件要编译,当然用make工具,一次搞定,前提是编写makefile
makefile文件就是把编译文件的命令写进文件而已
makefile基本语法和变量
target: 目标文件1 目标文件2 ...
gcc -o 二进制文件名 目标文件1 目标文件2 ...
#表示注释
tab键 是命令行的第一的字符
@符表示当前目标
例子: vi makefile
main:1.o 2.o 3.o
gcc -o test 1.o 2.o 3.o
clean:
rm -f test 1.o 2.o 3.o
这个makefile有两个目标
make main 执行main目标
make clean 执行清除文件
原来这个目标名随意,当成是make的参数
当数据重复的时候,用变量来替换,简化makefile
变量规则: 1 变量域变量内容用=隔开, 同时=两边都要有空格, 不能有:
2 变量左边不能有tab
3 习惯上变量用大写
4 运用变量是,用${变量名} 或$(变量)
5 该shell的环境变量,有的可以被makefile使用,例如CFLAGS,GCC会自动去读这个变量
例子:vi makefile
LIBS = -lm
OBJS = 1.o 2.o 3.o
CFLAGS = -Wall
main: ${OBJS}
gcc -o main ${OBJS} ${LIBS} #这一行的main和目标同名,还可以简化成$@
clean:
rm -f main ${OBJS}
有的时候直接运行make,后面没有跟目标,说用了默认的编译方法,是怎么实现的?
答案是all目标,这个目标下的行为直接这行make的默认编译行为
链接库
静态 libxxx.a
动态 libxxx.so
linux中比较倾向使用动态库。
如果使用静态库,一旦静态库升级,所有相关的软件都要重新编译。但是用动态库,只要升级动态就可以了,只要函数名不变,软件根本不需要重新编译。动态的库的好处之一就是升级方便。
tarball源码安装的更多相关文章
- Linux应用和系统库的2种安装方式---源码安装tarball和二进制rpm包
一.应用程序和系统库从哪里来? 两种机制,源码安装和二进制安装. 二.源码安装 tarball 1.核心思想是:利用开源代码,自己编译生成应用程序或者库,要求系统上必须已安装TMG(tar, make ...
- Linux源码安装软件
Linux环境下 源码编译安装软件 ==== 1. 下载,步骤略 ==== 2. 验证,部分官方下载同时提供签名,MD5,sha1,sha256等校验信息. $ gpg --verify gnupg- ...
- Linux软件安装管理---源码安装
在Linux平台下,软件包的类型可以划分为两类:源码包.二进制包. 源码包: 即程序软件的源代码(一般也叫Tarball,即将软件的源码以tar打包后再压缩的资源包). 二进制包: 如 Red Hat ...
- mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
Mono 3.4修复了很多bug,继续加强稳定性和性能(其实Mono 3.2.8 已经很稳定,性能也很好了),但是从http://download.mono-project.com/sources/m ...
- 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
上一篇:搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展 一.安装Memcached 1.yum安装libevent事件触发管理器 yum -y install libe ...
- 搭建LNAMP环境(二)- 源码安装Nginx1.10
上一篇:搭建LNAMP环境(一)- 源码安装MySQL5.6 1.yum安装编译nginx需要的包 yum -y install pcre pcre-devel zlib zlib-devel ope ...
- 搭建LNAMP环境(一)- 源码安装MySQL5.6
1.yum安装编译mysql需要的包 yum -y install gcc-c++ make cmake bison-devel ncurses-devel perl 2.为mysql创建一个新的用户 ...
- Greenplum 源码安装教程 —— 以 CentOS 平台为例
Greenplum 源码安装教程 作者:Arthur_Qin 禾众 Greenplum 主体以及orca ( 新一代优化器 ) 的代码以可以从 Github 上下载.如果不打算查看代码,想下载编译好的 ...
- salt源码安装软件和yum安装软件
上面简单列出了源码安装的sls文件书写思路. 涉及到一些固定的思路:如, 1,拷贝 解压安装时候需要依赖tar.gz存在 如果已安装则无需再次安装. 2,启动脚本 加入chk时候需要文件存在,如果已添 ...
随机推荐
- 实现DIV居中的几种方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- iOS swift 富文本显示 富文本在iOS中使用场景和解决方案
项目中很多地方都会用到富文本的内容:比如一般的商品详情,视频详情,资讯详情等,运营人员通过后台的富文本编辑器编辑的内容,前端拿到的就是一段富文本的字符串,这富文本大多都是图片和文字的组合.我们今天介绍 ...
- What is Web Application Architecture? How It Works, Trends, Best Practices and More
At Stackify, we understand the amount of effort that goes into creating great applications. That’s w ...
- 用node.js进行微信公众平台的开发
基本原理 用nodejs怎样来实现对微信公众平台的开发呢? 别的就不多说了,先来简单介绍微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务 ...
- 图像处理之优化---任意半径局部直方图类算法在PC中快速实现的框架
在图像处理中,局部算法一般来说,在很大程度上会获得比全局算法更为好的效果,因为他考虑到了图像领域像素的信息,而很多局部算法可以借助于直方图获得加速.同时,一些常规的算法,比如中值滤波.最大值滤波.最小 ...
- eventlet设计模式
1. 客户端模式(Client Pattern) 一个权威的客户端模式就是网络爬虫,下面例子列出一些站点URL,并尝试检索他们的网页内容以做后续操作 import eventlet from even ...
- webpack中引入的path[require('path')]是node.js内置的package,用来处理路径的。
http://www.runoob.com/nodejs/nodejs-path-module.html
- (转)使用 python Matplotlib 库绘图
运行一个简单的程序例子: import matplotlib.pyplot as plt plt.plot([1,2,3]) plt.ylabel('some numbers') plt.show() ...
- Linux经常使用命令(十八) - find概述
Linux下find命令在文件夹结构中搜索文件,并运行指定的操作.Linux下find命令提供了相当多的查找条件,功能非常强大.由于find具有强大的功能,所以它的选项也非常多.当中大部分选项都值得我 ...
- iOS开发之--storyboary下,拖拽一个tableview/collectionView/view 等,顶端下沉64个像素的处理方法
大家可能会发现,在sb或者xib里面拖拽一个tableview/collectionview/view的,顶端会自动下沉64个像素,也就是说,运行在模拟器上去,自导航下面又自动下沉了64个像素, 那是 ...