linux学习之路之受到编译软件

软件编译安装

我们知道在安装某一个软件时,有些我们不需要安装的程序或者特性被安装到系统上去了,而我们需要的程序或者特性没有被安装进去,或者说该软件存在一些漏洞等等因素,我们都需要修改该软件的源代码,然后在重新编译生产一个二进制文件,最后用户才可以安装这个二进制文件。

我们知道系统真正识别的文件其实只有二进制文件,而某个软件的原始码就是就是一段程序,而这类程序是供人看的,系统并不识别,因此为了让系统能够识别这段原始码的内容,必须要对原始码进行转换,转换成系统能够识别的二进制程序。而原始码转换成二进制文件需要借助编译器来完成。

所谓编译器就是将程序代码解析成系统能够识别的二进制程序。

所以我们可以这样来理解原始码、编译器、二进制程序的概念

原始码:就是我们常说的程序代码

编译器:将原始码转换成二进制文件

二进制文件:就是系统能够识别的程序

将原始码编译成二进制文件的流程图为:

其中在大多linux distribution中使用最多的编译器就是gcc了。而在编译的过程中,我们可能会调用某一些已经存在的库文件,这些库文件可以来完成某些功能的。切记,函数库是不能自动执行的,只有被调用,这个库文件的内容才会发挥作用。并且函数库分为静态和动态函数库。

在整个编译的过程中包括如下步骤:

一、准备好开发环境或者编译环境

这其中的编译环境主要包括以下几点:

1、  是否有合适的编译器可以编译该软件的原始码,例如是否有gcc等编译器

2、  该软件所需要的函数库是否存在,以及该软件所依赖的其他软件

3、  该软件是否适合该操作系统

4、  内核的表头文件(header include)是否存在

如果该编译环境不符合的话,可能在安装过程中出现错误,以至于安装失败

二、安装"Development Tools"和"Development Libraries"

三、编译及安装

其实使用gcc类似的编译器来编译程序过程比较复杂,除了每一个程序需要写上一段代码之外,还

需要写上最终的链接程序。而我们使用make这个项目管理工具就可以简化整个编译过程。

make的工作机制:make其实也是一只程序,当make执行时,make会在当前目录下搜索

Makefile(或者makefile)这个文本文件,该文件记录了原始码如何被编译的详细信息。而makefile

这个文件是由configure这个程序产生的。Configure这个程序主要是用来检测编译环境和在编译的过

程中让用户选择编译特性的。如果检测不成功,那么安装也不会成功。在检测环境完成后,就会

生产makefile文件。

因此编译和安装又可以分为如下步骤:

1、  默认原始码文件为*.tar.gz的,所以需要使用tar命令来解压缩,解压缩后的文件放在/usr/local/src目录下

2、  使用cd命令切换到原始码所在的目录

3、  运行configure这个程序检测编译环境,产生makefile文件

在运行configure这个程序时,后面可以加上一些参数,这些参数可以改变某些编译特性。例如:

--help:显示所有的编译参数

--prefix=/path/to/somewhere:指定软件安装后的产生文件的位置

--conf-path=/path/to/somefile:指定软件的配置文件

--sysconfdir=/path/to/somewhere:指定配置文件的目录

4、使用make命令根据makefile文件中的参数进行编译

5、使用make install命令来安装

我们知道一个程序的组成一般包括:二进制程序,函数库、配置文件、帮助文件等

其中这个二进制程序如果要运行的话,必须使用全路径名称来运行,因为PATH变量中没有这个二进制文件路径。或者直接修改PATH变量,让其能够识别此程序的二进制文件路径。

修改PATH变量的方法有两种:

一、直接修改/etc/profile文件,修改PATH变量的值

二、在/etc/profile.d目录下建立一个以.sh为名称后缀的文件,在这里添加一行

export PATH=$PATH:/path/to/somefile

而库文件默认存放在/lib,/usr/lib目录下。要增添额外的搜索路径可以这么做:

在/etc/id.so.conf.d/中创建以.conf为后缀的文件,而后把要增添的路径直接写在此文件中;

使用idconfig命令可以通知系统重新搜索库文件

其中-v:显示重新搜索库文件的过程

头文件:输出给系统

默认:/usr/include

增添头文件搜寻路径,使用链接进行:

/usr/local/tengine/include/   /usr/include/

两种方式:

ln -s /usr/local/tengine/include/* /usr/include/ 或

ln -s /usr/local/tengine/include  /usr/include/tengine

该软件产生的帮助文件默认存放在指定目录下的man目录下。为了可以使用man命令查询可以这样做:

1、man -M /PATH/TO/MAN_DIR COMMAND

2、在/etc/man.config中添加一条MANPATH

时间: 2024-10-15 17:45:12

linux学习之路之受到编译软件的相关文章

linux学习之路之手动编译内核

手动编译内核 一般来说,内核的核心功是直接在内核里,其他大多数功能具有以下三种选择: 1.不使用该功能 2.将这些功能编译成模块的形式 3.将这些功能直接编译进内核当中 那么该如何手动编译内核呢? 手动编译的方式: 使用make gconfig命令,不过使用该命令适用于Gnome桌面环境,且需要安装图形开发库 使用make kconfig命令,该命令适用于KDE桌面环境,且需要安装图形开发库 不过最常见的方式是使用make menuconfig命令来编译,使用该命令会产生一个窗口界面 在该窗口下

linux学习之路之磁盘阵列RAID及硬件RAID和软件RAID的区别

我们知道单个磁盘存储数据的容量是有限的,为了让磁盘的容量增大,我们可以将多个较小的磁盘组合在一起,形成一个较大的磁盘装置,这就是RAID(独立式磁盘阵列),RAID不仅可以提高数据的存储容量,也可以提高数据保护功能,不同级别的RAID,所提供的的功能各不一样. RAID常见的级别有RAID0,RAID1,RAID5,RAID10,RAID01,RAID5,RAID50 下面逐个介绍这些级别的工作原理. RAID0:首先将磁盘分成等量的数据块(CHUNK),然后在将存储的数据切分成符合CHUNK大

linux学习之路之模块管理和内核编译

我们知道linux内核再启动过程中,主要完成以下几种功能: 1.侦测硬件信息 2.驱动初始化(可能借助intrd文件加载硬件模块) 3.以只读方式挂载根文件系统 4.转载第一支程序init 如果我们的kernel识别不了某些硬件或者实现不了某些功能的话,那么只能将某些功能代码添加在内核当中,或者将这些功能代码做成模块的形式,kernel需要哪些模块就直接调用这些模块即可.通过这两种功能就可以实现相应的功能. 而不同的实现机制和kernel设计有关. kernel设计分为2种: 一种是单内核:这种

linux学习之路之ssh协议

SSH协议 SSH英文全称Secure SShell,是一种安全的协议,也是用于远程登入的. SSH相比telenet而言,具有更高的安全性,使用telent远处登入某台主机,存在着以下两个隐患: 1.用户认证是明文的 2.数据传输也是明文的 因此,处于数据安全考虑,使用SSH来远处登入更安全. SSH有2个版本,SSHv1和SSHv2,SSH1由于无法抵挡中间人攻击,因此,现在很少使用SSHv1版了.所以使用更多的还是SSHv2版,毕竟它要安全多了. SSH是工作在TCP层,端口号是22:te

1.菜鸟的linux学习之路------linux初体验

脚本编程语言通常是解释型的.这类程序的执行,是由解释器读入代码,并将其转换成内部的形式,在执行.请注意,解释器本身是一般的编译型程序. 常用的脚本编程语言有 :awk,Perl,Python,Ruby,Shell.这里的Ruby是日本人研发的. 注释: linux : 1.rm 删除指定的文件 例:rm /Users/apple/Desktop/QQDock.plist 2.假设你想知道现在的系统有多少人在登录,那么 who命令可以实现 3.|管道符号可以在两个程序之间建立管道:who的输出,成

linux学习之路之目录结构

FHS的产生 我们知道目前linux的发行版本很多,如果每一个发行版本,它的目录层次结构都不相同的话,那么当管理员去管理其他的linux主机时,就会不知多措了.而且在开发过程中,如果每一个程序员都按照自己的想法去存放的数据的话,那么其他的程序员想去查找别人的数据文件时,这是问题就来了,因为文件系统中存放了那么多的数据,谁知道你把数据存放在哪儿了?因此,需要一个标准来规范,这样每个人都按照这种规范去存放.查找数据等操作,这样,当其他人如果需要去查找的话,就会简单多了. FHS:全称为文件系统目录标

linux学习之路之LVM

试想一种情况,当初我们在规划磁盘的时候,只给某一个磁盘或分区之划分了30G的容量,但是后来,随着业务的需求,该磁盘或者分区的使用量会越来越大,等到以后再有数据存放时,发现该磁盘或者分区的容量不够用,此时该怎么办了?可以新增一个磁盘,经过格式化,挂载等过程就可以使用这个磁盘了,再将原来磁盘的数据完全的复制过来.等到后来又发现,规划的磁盘又太大了,然后又使用上述方法来减少磁盘的大小.虽然这种方法可行,但是效率低,比较复杂.不应该是我们首选的方法. 当然,我们可以这样做,将多个磁盘或者分区(PV)组合

linux学习之路之LVM的快照功能

我们知道LVM可以弹性的调整文件系统的大小,其实LVM除了可以调整文件系统的大小之外,还有另一个功能就是系统快照. 所谓系统快照就是将某一时刻文件系统中的信息记录到快照区中,这里的某一时刻指的是在原始数据被改变的那一瞬间,原始数据会移到快照区里.而其他没有改变的数据,快照区和文件系统共享.所以刚建立快照时快照区内容和文件系统的内容一样. 由于我们知道只有改变的数据才会移动到快照区,因此快照区中保存的内容比较少. 快照区的原理图如下: 那么如何建立快照区呢? 使用lvcreate -s命令来创建快

linux学习之路之磁盘管理和文件系统三

ext3文件系统和ext2文件系统的区别? 在某些时候,某个用户在linux系统上写入数据,这时系统正好断电或者系统核心出现错误,写入的数据仅有inode table和datablock而已,可能会导致之前写过的数据没有保存在磁盘上.而当系统重启后,系统可能会对没有保存的数据进行数据恢复.但是,由于系统并不知道是哪个文件不完整,因此会遍历整个文件系统中inode,来查看block是否完整.不过,当某个文件的数据太大时,数据的恢复时间可能会比较长,而这对于服务器来说是不利的.所以在这种情况下,也就