软件最原始的安装方法 用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. webservice统一认证

    service package cn.edu.hbcf.privilege.ws; import javax.jws.WebParam; import javax.jws.WebService; @W ...

  2. [转载] 关于mkvtoolnix批量处理的

    需要的工具:mkvtoolnix.记事本 案例介绍:用文件A的视频+文件B的音频+字幕合成新MKV,在文件列表中,按A.B.C顺序排列.其中A与B都是Mkv格式,所以A与B不能放在同一个文件夹中(就算 ...

  3. [Python基础]Python文件处理小结

    1. 文件的打开与关闭 <1>打开文件 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件名,访问模式) 示例如下: f = open('te ...

  4. MapReduce实战(五)实现关联查询

    需求: 利用MapReduce程序,实现SQL语句中的join关联查询. 订单数据表order: id date pid amount 1001 20150710 P0001 2 1002 20150 ...

  5. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  6. 修改storm ui 默认端口

    vim conf/storm.yaml 在下面添加 ui.port: 8080

  7. Tuning 16 Using Materialized view

    物化视图表示在数据库的其他地方另外存放了一份as 后边的内容, 如果只是普通view, 那么 rowid 是相同的, view相当于指针, 它指向基表. 而物化视图的rowid 与基表是不一样的, 所 ...

  8. 宝宝书 & 网站

    1. 网站 妈妈帮 宝宝树 2. 图书推荐 育儿百科 育儿经 中国儿童智力方程 聪明宝宝营养食谱1001例

  9. css3动画4

    效果: 代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...

  10. datagrid 溢出文本显示省略号

    .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber{ -o-text- ...