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时候需要文件存在,如果已添 ...
随机推荐
- SPI_FLASH时序描述及驱动编程
推荐 分享一个朋友的人工智能教程,零基础!通俗易懂!希望你也加入到人工智能的队伍中来! http://www.captainbed.net/strongerhuang Ⅰ.写在前面 前面文章讲述过关于 ...
- httpd-2.2.22安装
cgi部分共分三部分:html,cgi和服务器(httpd). 首先介绍httpd安装: 1. 软件包:httpd-2.2.22.tar.gz 系统:3.8.0-44-generic #66~pre ...
- Alluxio部署(集群模式)
下载(pre-build for Hadoop 2.7) http://www.alluxio.org/download` 解压 tar -xvf alluxio-1.3.0-hadoop2.7-bi ...
- Centos6.X 安装MongoDb
1.查看linux版本,之所以查看linux版本,是因为centos7和以前版本用的防火墙不一样,安装完mongodb后,需要关闭防火墙(或者其他方法,专业运维人员使用,我们这里为简单,直接关闭即可) ...
- mfc小工具开发之定时闹钟之---多线程急线程同步
一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...
- iOS开发中“此证书的签发者无效”的解决方式
iOS开发过程中有时候会出现证书所有变成无效,例如以下图 然后进行打包的时候会提演示样例如以下警告: 解决方法: 第一步: 下载https://developer.apple.com/certif ...
- PHP手机号码归属地查询API接口
淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...
- Learning to Compare: Relation Network 源码调试
CVPR 2018 的一篇少样本学习论文 Learning to Compare: Relation Network for Few-Shot Learning 源码地址:https://github ...
- EntityFramework增删改查
http://www.cnblogs.com/libingql/archive/2013/01/29/2881988.html
- 好久没写blog了 ~ 换了个城市,换了个公司,各种忙碌
最近一直在忙工作交接以及换城市.入职的事情 ~~~ 新公司做C++的比较少,so全上C++11了,写代码各种爽. 最近应该会写一点关于QT的blog , 学到新知识了哈.