软件最原始的安装方法 用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源码安装的更多相关文章

  1. Linux应用和系统库的2种安装方式---源码安装tarball和二进制rpm包

    一.应用程序和系统库从哪里来? 两种机制,源码安装和二进制安装. 二.源码安装 tarball 1.核心思想是:利用开源代码,自己编译生成应用程序或者库,要求系统上必须已安装TMG(tar, make ...

  2. Linux源码安装软件

    Linux环境下 源码编译安装软件 ==== 1. 下载,步骤略 ==== 2. 验证,部分官方下载同时提供签名,MD5,sha1,sha256等校验信息. $ gpg --verify gnupg- ...

  3. Linux软件安装管理---源码安装

    在Linux平台下,软件包的类型可以划分为两类:源码包.二进制包. 源码包: 即程序软件的源代码(一般也叫Tarball,即将软件的源码以tar打包后再压缩的资源包). 二进制包: 如 Red Hat ...

  4. 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 ...

  5. 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展

    上一篇:搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展 一.安装Memcached 1.yum安装libevent事件触发管理器 yum -y install libe ...

  6. 搭建LNAMP环境(二)- 源码安装Nginx1.10

    上一篇:搭建LNAMP环境(一)- 源码安装MySQL5.6 1.yum安装编译nginx需要的包 yum -y install pcre pcre-devel zlib zlib-devel ope ...

  7. 搭建LNAMP环境(一)- 源码安装MySQL5.6

    1.yum安装编译mysql需要的包 yum -y install gcc-c++ make cmake bison-devel ncurses-devel perl 2.为mysql创建一个新的用户 ...

  8. Greenplum 源码安装教程 —— 以 CentOS 平台为例

    Greenplum 源码安装教程 作者:Arthur_Qin 禾众 Greenplum 主体以及orca ( 新一代优化器 ) 的代码以可以从 Github 上下载.如果不打算查看代码,想下载编译好的 ...

  9. salt源码安装软件和yum安装软件

    上面简单列出了源码安装的sls文件书写思路. 涉及到一些固定的思路:如, 1,拷贝 解压安装时候需要依赖tar.gz存在 如果已安装则无需再次安装. 2,启动脚本 加入chk时候需要文件存在,如果已添 ...

随机推荐

  1. 跟着百度学PHP[15]-SESSION的应用/网站登陆案例完整案例

    先把几个应该要有的页面建立好.

  2. java模拟从http上下载文件

    1.依赖 Apache httpclient 包. 2.代码 HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = ...

  3. 第二百二十六节,jQuery EasyUI,Tree(树)组件

    jQuery EasyUI,Tree(树)组件 本节课重点了解 EasyUI 中 Tree(树)组件的使用方法,这个组件依赖于 Draggable(拖 动)和 Droppable(放置)组件. 一.加 ...

  4. Vector、ArrayList、List使用深入剖析

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...

  5. HTML表单页面的运用

    本章目标:掌握表单基本结构<form> 掌握各种表单元素 能理解post和get两种提交方式的区别 本章重点:掌握各种表单元素 本章难点:post和get两种提交方式的区别 一.    H ...

  6. python 2个版本如何共存

    我们在安装Python3(>=3.3)时,Python的安装包实际上在系统中安装了一个启动器py.exe,默认放置在文件夹C:\Windows\下面.这个启动器允许我们指定使用Python2还是 ...

  7. git 入门一(初识)

    分布式版本控制系统 & 集中式版本控制系统   分布式版本控制系统( Distributed Version Control System)在这类系统中,像 Git,Mercurial,Baz ...

  8. jqgrid的search

    2015-04-19 本人近期的博客都是和之前的随笔相关联的. 今天想和大家分享的是jqgrid中的search. 相信大家写代码用到jqgrid的时候都可能会在jqgrid中涉及查询,其实查询和 增 ...

  9. FireBug与FirePHP

    a.FireBug,平时用的比较多.就是在客户端调试代码.如:hTML ,CSS,JS等 b.FireBug安装较容易. b-1,打开火狐浏览器 b-2,打开“附加组件” b-3.搜索“firebug ...

  10. hdu 4289(最小割)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4289 思路:求最小花费,最小割应用,将点权转化为边权,拆点,(i,i+n)之间连边,容量为在城市i的花 ...