执行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. maven source 1.3 中不支持泛型 解决办法

    maven打包时始终出现以下提示:1.-source 1.3 中不支持泛型(请使用 -source 5 或更高版本以启用泛型)List<User> userList= new ArrayL ...

  2. K8s快速入门

    在k8s中所有的内容都抽象为资源,资源实例化之后,叫做对象.一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单 资源清单的格式: apiVersion: ...

  3. camstart API 服务器负载均衡

    docker 安装haproxy docker pull haproxy 创建配置文件到:D:/docker/haproxy 配置文件内容如下 # 配置文件 # 全局配置 global # 设置日志文 ...

  4. XproerIM2-更新-2017-6-28

    资源下载:源代码,开发文档,客户端,openfire-3.9.3.exe,openfire-4.1.4.exe, 开源库:cximage600-full,boost-1.55.0,pugixml-1. ...

  5. window备忘录

    1.window.name属性是一个字符串,表示当前窗口的名字,只有当浏览器窗口关闭的时候,此属性才会消失. 2.window.closed属性返回一个布尔值,表示窗口是否关闭.此属性一般用来检查使用 ...

  6. C++指针和字符串

    ]="rose'; cout<<flowers<<endl; 数组名是第一个元素的地址,

  7. Java框架spring 学习笔记(九):Spring的bean管理(@Required、@Component、@Autowired、@Resource注解)

    注解:代码里面特殊的标记,使用注解可以完成相关功能 注解写法:@注解名称(属性名.属性值) @Required 用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就 ...

  8. django RESTful设计方法

    1. 域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下. https://example.org ...

  9. TZOJ 2289 Help Bob(状压DP)

    描述 Bob loves Pizza but is always out of money. One day he reads in the newspapers that his favorite ...

  10. .NET Core 微服务实例

    关于微服务,MSDN给出了定义和架构图:https://docs.microsoft.com/zh-cn/azure/architecture/guide/architecture-styles/mi ...