执行make,会在当前目录查找makefile文本文件(记录了源代码如何编译的详细信息)。

内核相关的函数信息放置在/usr/lib、/usr/lib64里。

在Tarball(一般为xxx.tar.gz)中,软件开发商通常提供了源码,提供configure文件或config文件(检测用户的操作环境,并建立makefile文件),本软件的简易说明和安装说明。

configure文件或config文件检测的内容包括编译器,函数库,操作系统平台,头文件等。

软件Tarball安装步骤,将Tarball解开,gcc编译,安装。

编辑程序代码vim,开始编译与执行,如针对h.c:gcc h.c,或gcc -c h.c#指定输出目标文件名称,gcc -o h h.o获得输出

执行 ./h

多文件编译与链接:编译:gcc -c thanks.c thanks_2.c,链接:gcc -o thanks thanks.o thanks_2.o,执行:./thanks

加入优化参数的编译:gcc -O -c thanks.c thanks_2.c ,加入编译过程的详细信息如警告等:gcc -Wall -c thanks.c thanks_2.c

-O -Wall等非必要参数标识为CFLAGS

加入动态链接的函数库libm.so在指定的文件夹中寻找:gcc sin.c -lm -L/lib -L/lib64 #默认加入函数库了,如果加入执行函数库,如数学函数math使用的libm.so,使用-l加入函数库,m则为libm.so,-L后接寻找的目录。

指定查找stdio的文件目录,使用-I gcc sin.c -lm -I/usr/include

makefile的基本语法:#注释,《tab》后接命令行,目标与目标文件以:隔开。如:

main: main.o haha.o sin_value.o cos_value.o

  gcc -o main main.o haha.o sin_value.o cos_value.o -lm
clean:
   rm -f main main.o haha.o sin_value.o cos_value.o

使用make命令,即可完成编译链接。使用make clean命令,完成删除.o文件。先清除目标问再编译make clean main

修改makefile文件格式,使用变量简化:变量以$()或${}显示,shell环境可以利用CFLAGS等环境变量

LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
  gcc -o main ${OBJS} ${LIBS}
clean:
  rm -f main ${OBJS}

可以使用CFLAGS="-Wall" make clean main来进行编译链接。默认优先指令指定(makefile中的环境变量次之,shell中的环境变量随后)  

$@:代表目前的目标(target)

LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS = -Wall
main: ${OBJS}
gcc -o $@ ${OBJS} ${LIBS} <==那个 $@ 就是 main !
clean:
rm -f main ${OBJS}

在网络环境下可以使用yum安装组件:  

安装gcc等软件开发工具:yum groupinstall "Development Tools"

安装图形用户界面支持:yum groupinstall "X Software Development"

软件更新:yum groupinstall "Legacy Software Development"

获取原始文件后,tarball/usr/local/src目录下解压缩,查看INSTALL下的README文件,之后按如下步骤编译,安装。

在Tarball中,执行./configure文件,建立Makefile,之后使用make读取clean工作,清除上次产生的.o,然后执行make命令,最后执行make install。

如果安装位置在独立的目录,需要将安装好的软件路径写入/etc/man_db.conf文件和路径文件。

linux发行版安装的软件在/usr下,用户自行安装的软件建议在/usr/local/下。源代码建议释放到/usr/local/src。则在这样情况下自行安装的软件,最后释放到的位置为:如果自行安装文件夹,则在自定义文件夹下也会有相应的四个目录。

 /usr/local/etc
 /usr/local/bin
 /usr/local/lib
 /usr/local/man

如安装ntp:

cd /usr/local/src
tar -zxvf /root/ntp-4.2.8p3.tar.gz
cd ntp-4.2.8p3
vi INSTALL
./configure --help | more ./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
#根据之前的说明文件,自定义了安装目录/usr/local/ntp
make clean; make
make check
make install

使用patch更新源码:

将第一版源码解压出以后,根据patch文件进行更新源码:

patch -p1 < ../main_0.1_to_0.2.patch
#其中的p1代表去掉一层目录后的对比更新。
之后就不用改makefile,直接使用make clean main更新即可
make install安装,make uninstall卸载

patch还原patch -R < ../main_0.1_to_0.2.patch  

  

静态链接库

libxxx.a拓展名,编译直接整合到程序中,可以独立运行,生成的文件较大,升级需要重新编译。

动态链接库

libxxx.so拓展名,在程序中只是指针,不能独立运行,文件小,升级方便。

将动态链接库加载到高速缓存中加快运行速度:在/etc/ld.so.conf下写入想要读取的动态链接库目录,利用ldconfig将以上读入缓存并记录备份到/etc/ld.so.cache文件。

如:

vim /etc/ld.so.conf.d/vbird.conf
/usr/lib64/mysql ldconfig
ldconfig -p#查看/etc/ld.so.cache中的数据

  

判断某二进制文件含有哪些动态链接库ldd -v列出所有信息:

如:ldd /usr/bin/passwd

找出函数库的相关函数库:ldd -v /lib64/libc.so.6

为了防止木马篡改,需要教研软件的正确性。在下载软件的网址上找出对应的校验值,通过

md5sum、sha1sum、sha256sum找到软件校验值进行对比如:md5sum ntp-4.2.8p3.tar.gz。

在本地创建以下文件的校验值,并以计划任务对比,防止篡改。

 /etc/passwd
 /etc/shadow (假如你不让用户改密码了)
 /etc/group
 /usr/bin/passwd
 /sbin/rpcbind
 /bin/login (这个也很容易被骇!)
 /bin/ls
 /bin/ps
 /bin/top

  

别人的Linux私房菜(22)软件安装:源代码与Tarball的更多相关文章

  1. 别人的Linux私房菜(6)文件权限与目录配置

    账号与一般身份用户存放在/etc/passwd文件中 个人密码存放在/etc/shadow文件中 Linux所有组名存放在/etc/group中 ls -al查看所有信息并显示权限等 文件权限的10字 ...

  2. 别人的Linux私房菜(23)软件安装RPM、SRPM、YUM

    RPM(RedHat Package Manager),不同Linux发行版发布的RPM文件甚至不同版本,不通用. SRPM为Source RPM,所提供的软件内容没有经过编译,格式为xxx.src. ...

  3. 别人的Linux私房菜(4)安装CentOS7

    linux磁盘分区参考: 添加磁盘分区(总30G). BIOS boot 2MB 系统自定义文件系统 分区格式为主要分区 /boot 1GB  文件系统为xfs  主要分区 / 10GB 文件系统为x ...

  4. 别人的Linux私房菜(19)认识与分析日志文件

    日志文件通常只有root可以读取,解决系统和网络方面的问题. /var/log/boot.log本次开机系统检测和启动硬件,和内核支持的相关功能的信息记录. /var/log/cron计划任务有没有被 ...

  5. 别人的Linux私房菜(2)Linux简介

    同一操作系统无法在不同硬件平台上运行.架构. Bell实验室和麻省理工学院MIT和通用电气公司GE发起了Multics计划,分时兼容系统,300以上多终端连接主机. Unics 由Multics中的人 ...

  6. 别人的Linux私房菜(21)基础系统设置与备份策略

    网络设置,手动设置IP,DHCP自动获取. 以太网协议开发出来的网卡ethN,N为数字. CentOS7对网卡命名的规则:eno代表由主板BIOS内建立的网卡,ens1由主板BIOS内建的PCI-E界 ...

  7. 别人的Linux私房菜(20)启动流程、模块管理与Loader

    系统启动时,首先加载BIOS,通过BOIS读取COMS的硬件信息,进行自我检测,取得第一个可启动的设备(多个根据设置有关). 读取并执行设备内的MBR启动引导程序,引导程序调用boot sector中 ...

  8. 别人的Linux私房菜(18)认识系统服务(daemon)

    完成服务service的程序称为daemon.完成计划性的服务程序如crond是一个daemon. 早期的System V的init管理daemon操作中,系统内核首先调用init,然后init运行系 ...

  9. 别人的Linux私房菜(17)进程管理与SELinux初探

    程序在磁盘中,通过用户的执行触发.触发事件时,加载到内存,系统将它定义成进程,给予进程PID,根据触发的用户和属性,给予PID合适的权限. PID和登陆者的UID/GID有关.父进程衍生出来的进程为子 ...

随机推荐

  1. Shopt命令(删除排除)

    有时候我们需要反选某个文件以外的其他文件,就会用到rm -rf!(file)命令,但是有时候这条命令会报错显示 -bash: !: event not found 解决办法:shopt -s extg ...

  2. Codeforces Round #436 E. Fire(背包dp+输出路径)

    题意:失火了,有n个物品,每个物品有价值pi,必须在时间di前(小于di)被救,否则就要被烧毁.救某个物 品需要时间ti,问最多救回多少价值的物品,并输出救物品的顺序. Examples Input ...

  3. maven的pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. angularJS+KindEditor无法获取或清空textarea的值

    在html页面中初始化KindEditor: <script type="text/javascript"> var editor; KindEditor.ready( ...

  5. appium 版本更新后的方法变化更新收集 ---持续更新

    在高版本的android手机(例如android 7.0 , 8.0等等),必须使用高版本的appium, 以及对应的selenium版本,那么很多的appium或者selenium方法会变得无法直接 ...

  6. stm32输入的功能引脚功能介绍

    Ⅰ.写在前面在开发STM32的时候,都需要对IO的模式进行配置(GPIO_InitStructure. GPIO_Mode = xxx).但是,你们都知道各种模式的具体意义吗? 有的人问:IO口输出可 ...

  7. 重温IO

    IO就是输入输出,输出流可以理解为向目标写入数据,输入流可以理解为从源地址读取.流是一组有序的数据序列.   输入流 输出流 字节流 InputStream OutputStream 字符流 Read ...

  8. stark组件开发之组合搜索页面效果和 URL

    页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...

  9. VS2015一新建项目就出现未将对象引用设置到对象的实例怎么办?[z]

    https://blog.csdn.net/tiandyoin/article/details/79722800 在控制面板-卸载或修复程序太麻烦,而且不一定保证解决,可以这样------打开--C: ...

  10. xx星空面试题

    一面 1.什么是多态 实现原理? 2.什么是重载?class加载原理? 3.常用设计模式,简单介绍 4.看过哪些java的书?android的书? 5.动态注册静态注册 优缺点?静态注册函数如何被调用 ...