加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_商丘站长网 (https://www.0370zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux源代码软件包,linux软件包管理之三(源代码安装)

发布时间:2022-12-03 09:33:31 所属栏目:Linux 来源:互联网
导读: 到达我们的源代码安装了。源代码安装没有rpm安装的快捷。但比rpm灵活。如我们自定义编译参数,可以最大化的贴近我们想要的功能,性能好。而且我们能看到源代码,安装的整个过程都很清楚,这

到达我们的源代码安装了。源代码安装没有rpm安装的快捷。但比rpm灵活。如我们自定义编译参数,可以最大化的贴近我们想要的功能,性能好。而且我们能看到源代码,安装的整个过程都很清楚,这就比rpm安全。源代码安装的程序一般都会放在同一个目录中,这样迁移也很方便,把所依赖的库和程序移走就可以。因为没有rpm数据库和安装的固定路径,所以可以多版本并存。更有趣的是因为可以自定义安装位置,所以普通用户也可以安装程序,如在自己的家目录中。再加一点,发行商为了程序包的通用,一般都是在老点的机器上编译。

目录:

一、简介

二、安装

环境:

系统:CentOS7.1

gcc: 4.8.3

一、简介

这里主要说的是关于C代码的编译安装,其实也说不了什么东西linux软件源,简单的编译安装只有三步,而指定参数的部分,不同的软件还都不一样。这一部分主要是零散的一些东西。

C代码编译安装三步:./configure

make

makeinstall

这部分因为知识面的欠缺,实在是组织不起来,是一些上课的笔记和自己的理解。

标准的程序安装要下面这么多的步骤,不过我们不用自己手动执行:

源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行

库是一种功能的实现,调用它就可以直接使用这个功能:

库是可执行程序,但本身不能作为程序执行入口,只能被调用。

b9be509b925059110cc5bb9b6e6e4c29.png

如这个图片,程序只要调用API(在这里就是库),库这个程序可能会发起系统调用也可能只是某一种简单的功能,完毕以后把结果给程序,程序拿着结果再接着执行。 当然啦,有的程序也可能是直接调用系统调用的,所以才画了两条直接到系统的线。

其中程序安装过程中的链接就是把库和程序做关联,而使程序真正的可以工作起来。

静态链接:把库编译到到程序中。

动态链接:dll, so(shared object) 。

linux上面在编译程序的时候由ld程序在管理库的查找和加载。在程序安装完成以后,则需要ld-linux-x86-64.so.2来管理(CentOS7)。

如果把ld移走:[root@localhosthttpd-2.2.31]#./configure

.....

configure:error:in`/root/httpd-2.2.31':

configure:error:Ccompilercannotcreateexecutables

See`config.log'formoredetails

[root@localhosthttpd-2.2.31]#

如果把ld-linux-x86-64.so.2移走:[root@localhost~]#fdisk

-bash:/usr/sbin/fdisk:/lib64/ld-linux-x86-64.so.2:badELFinterpreter:Nosuchfileordirectory

[root@localhost~]#ls

-bash:/usr/bin/ls:/lib64/ld-linux-x86-64.so.2:badELFinterpreter:Nosuchfileordirectory

[root@localhost~]#wc

-bash:/usr/bin/wc:/lib64/ld-linux-x86-64.so.2:badELFinterpreter:Nosuchfileordirectory

这个可不要轻易尝试,除了内嵌命令,都不能运行了。甚至都不能登录了。玩大了,救援了

加个东西,今天上课的时候,老师说这两个是库的入口,具体是怎么回事暂时先不搞它。

5043e48f67ed108f2fabb8590395f572.png

API: Application Programing Interface 应用编程接口,也就是库的调用接口。

ABI: Application Binary Interface 应用二进制接口,这个就属于低层的运行方式。

API兼容,意味着开发库兼容, 因此,源代码可跨平台

ABI兼容,编译后的程序可以跨平台。

库调用: 开发调用,运行调用。

开发调用(API),是根据头文件来设置函数的各种参数,参数又是怎么传递的。函数就是库的接口。从而来调用库的各种功能。

因为各个系统有通用的API接口,这也就实现了源代码的跨平台。当然有的程序不只是只调用API,也有可能调用系统调用。而这个的跨平台取决于系统接口的一致性。如POSIX标准。

POSIX:可移植操作系统接口(Portable Operating System Interface)

此标准用来定义操作系统的接口规范(系统调用接口),以实现在不同的操作系统上只要重新编译程序就可以运行。但现在只是实现了一部分的调用接口。所以有些代码还是不能直接跨平台的。

以上都是在编译之前的,如果是想在编译之后的跨平台,那就取决于ABI了。

运行调用(ABI),是直接调用库的二进制程序。 不同的CPU架构,不同的操作系统,所组织 的二进制方式也不一样。 ABI的不同。如以下:

1、 OS平台:应用程序必须是特定OS平台所支持的版本。因为二进制的组织格式不一样。

2、 硬件平台: 应用程序必须为特定的CPU所支持。因为CPU汇编指令集的不同。

在这里二进制根本就无法展开运行。就算是CPU架构相同。系统的不同,也会导致二进制的执行格式不同,二进制的切入执行点都不对,当然无法执行,动都无法动,更别提调用库了。其实我也不是很清楚,朋友就当看故事吧。

程序编译会自动采用所在OS平台的库。 如 64的系统 64的库。

源代码翻译成二进制程序,其实就是翻译成了可以被当前CPU指令集所能够执行的二进制程序。

amd 64bit 和 intel 64bits 的CPU架构是相同的。指令集也是相同的。 都是x86系列。

二、安装

编译C源代码,前提是提供开发工具及开发环境

开发工具:gcc,make等。

开发环境:开发库,头文件。 如glibc标准库。

简单一点直接安装开发包组:

开发工具:yum groupinstall "Development Tools"

服务器平台开发:yum groupinstall “Server Platform Development”

开发工具介绍,是由程序员来完成的,我们这里的安装用不到。

autoconf: 生成configure脚本

automake:生成Makefile.in模板。

C代码编译安装的三步骤:./configure(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;(2) 检查依赖到的外部环境;

make根据makefile文件,构建应用程序;

make install调用install命令复制各文件到指定目录。

建议:安装前查看INSTALL,README

第一步:configure脚本

选项:指定安装位置、指定启用的特性

--help: 获取其支持使用的选项

选项分类:

安装路径设定:

--prefix=/PATH/TO/SOMEWHERE: 指定默认安装位置;默认为/usr/local/

--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;

Optional Features: 可选特性

--disable-FEATURE

--enable-FEATURE[=ARG]

Optional Packages: 可选包

--with-PACKAGE[=ARG]

--without-PACKAGE

第二步:make

第三步:make install

安装后的配置:

(1) 导出二进制程序目录至PATH环境变量中;

编辑文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

(2) 导出库文件路径

编辑/etc/ld.so.conf.d/NAME.conf,添加新的库文件所在目录至此文件中;并让系统重新生成缓存:ldconfig [-v]

(3) 导出头文件

基于链接的方式实现: ln -sv

(4) 导出帮助手册

编辑/etc/man.config文件,添加一个MANPATH

安装httpd2.2:[root@localhosthttpd-2.2.31]#./configure--prefix=/usr/local/httpd2.2--sysconfdir=/etc/httpd/

[root@localhosthttpd-2.2.31]#make&&makeinstall来看看安装目录下的文件。

[root@localhosthttpd2.2]#ls

binbuildcgi-binerrorhtdocsiconsincludeliblogsmanmanualmodules

这里是我们所指定的配置文件的位置。[root@localhosthttpd2.2]#ll/etc/httpd

total92

drwxr-xr-x.2rootroot4096Dec2702:28extra

-rw-r--r--.1rootroot13720Dec2702:28httpd.conf

-rw-r--r--.1rootroot12958Dec2702:28magic

-rw-r--r--.1rootroot53011Dec2702:28mime.types

drwxr-xr-x.3rootroot4096Dec2702:28original

[root@localhosthttpd2.2]#

安装后配置:

1、PATH变量:

因为我们自定义安装的位置没有在PATH变量中,这样我们是不能直接执行所安装的软件的。因为我们执行的命令除了内嵌和有别名的以外,都是bash查找PATH变量所指的路径下所有文件的方式来执行的。

只要在/etc/profild.d/目录下添加以.sh结尾的文件就可以了。[root@localhostbin]#pwd

/usr/local/httpd2.2/bin

[root@localhostbin]#httpd

(编辑:开发网_商丘站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!