专栏首页大闲人柴毛毛linux软件安装(一)——源码安装

linux软件安装(一)——源码安装

Linux软件简介

Linux上几乎所有的软件都经过了GPL授权,因此几乎所有的软件都会提供源码。 而一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。

软件编译过程

将源码编译成可供Linux运行的二进制文件一共需要两步: 1. 使用gcc编译器将源码编译成目标文件 2. 再次使用gcc编译器将目标文件链接成二进制文件

这过程看似简单,实则不然。一个软件的源代码往往被封装在多个源文件中,此外这些文件有错综复杂的依赖关系,编译需要严格按照指定的顺序进行,这无疑增加了编译的难度。好在make命令可以帮助我们简化编译过程。

整个编译过程被浓缩在Makefile文件中,当执行make命令时,make会去当前目录中寻找Makefile文件,并根据该文件中的要求完成整个编译过程。

而Makefile文件由configure命令产生。当执行configure命令时,configure会根据当前系统环境动态生成一个适合本系统的Makefile文件,供make命令使用。

Linux源码安装步骤

  1. 获取源码 将软件的源码下载至/usr/local/,并解压。
  2. 查看INSTALL与README文件 解压后查看INSTALL与README文件,这两个文件中详细介绍了本软件的安装方法和注意事项。
  3. 创建Makefile文件 执行configure命令,生成Makefile文件。
  4. 编译 执行make clean;make命令将源码编译成二进制文件。 PS:make clean命令用来清除上一次编译生成的目标文件。这个步骤可有可无,但为了确保编译的成功,还是加上为好。防止由于软件中含有残留的目标文件导致编译失败。
  5. 安装 执行make install命令将上一步编译好的二进制文件安装到指定的目录中去。

安装演示

1.进入/usr/local/,并创建memcached目录:

cd /usr/local/
mkdir memcached

2.下载memcached的源码

wget http://memcached.org/files/memcached-1.4.29.tar.gz

3.解压源码

tar -zxvf memcached-1.4.29.tar.gz

4.执行configure,生成Makefile文件

./configure --prefix=/usr/local/memcached/

此时当前目录下将会生成一个Makefile文件。

  • 注意:–prefix参数指定软件安装目录。当执行make install命令时,会将软件安装在此路径中。

5.执行make,编译源码

make clean; make

此时make会读取Makefile文件,将源码编译成二进制文件,并存放在当前目录下。

6.执行make install,将软件安装至指定目录

make install

此时二进制文件会被安装到先前configure prefix参数设置的路径中去。 安装完成!

Linux函数库

1. 什么是“Linux函数库”?

运行在Linux上的软件时常会调用Linux内核的某些功能或其他软件的某些功能,那么这些被软件调用的功能称为Linux的函数库。软件自身的函数库存放在软件安装目录下的lib中,而Linux的函数库存放在/usr/lib和/usr/include中,linux内核的函数库存放在/lib/modules中。

2. Linux函数库的分类

Linux函数库分为静态函数库 和 动态函数库。 1. 静态函数库 - 扩展名:xxx.a - 在编译时会被整合到软件的二进制文件中去。因此拥有静态函数库的软件较为庞大。而且当系统的函数库更新时,引用该函数库的所有软件都需要重新编译才能正常使用。这是非常麻烦的!但拥有静态函数库的软件可以独立运行。 2. 动态函数库 - 扩展名:xxx.so - 在编译时仅仅将函数库的路径整合到软件的二进制文件中去。由于软件中包含的是函数库的路径,因此该软件无法独立运行,且函数库的路径不能发生变化,一旦变化,该软件将无法找到函数库,从而无法运行!这是动态函数库的最大缺点。但当动态函数库更新时,软件无需重新编译,因此更新较为方便,这是动态函数库的最大优点。

目前大部分软件均使用动态函数库,就是因为动态函数库在更新时体现出的优势。

3. 提升函数库读取效率

软件在运行某些功能时需要调用函数库中的函数,而函数库又是以文件的形式存放在外设上。那么如果将函数库存放在内存中,那么将会大大提升读取速度。在Linux中,可以使用ldconfig命令将指定的函数库加载进内存。具体步骤如下: 1. 在/etc/ld.so.conf中设置需要加载进内存的函数库 2. 使用ldconfig命令使配置生效

4. 查看软件的动态函数库

使用ldd命令即可查看指定软件所使用的全部动态函数库。

[root@iZ28st035lsZ usr]# ldd /usr/bin/passwd 
    linux-vdso.so.1 =>  (0x00007fffa2bfd000)
    libuser.so.1 => /usr/lib64/libuser.so.1 (0x0000003edac00000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003edc400000)
    libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x0000003edcc00000)
    libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x0000003edf800000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003eda800000)
    libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x0000003edc800000)
    libpopt.so.0 => /usr/lib64/libpopt.so.0 (0x0000003edd400000)
    libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x0000003edc000000)
    libaudit.so.0 => /lib64/libaudit.so.0 (0x0000003edd000000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003edb400000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003eda400000)
    libpam.so.0 => /lib64/libpam.so.0 (0x0000003edf400000)
    librt.so.1 => /lib64/librt.so.1 (0x0000003edbc00000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003ed9c00000)
    libsepol.so.1 => /lib64/libsepol.so.1 (0x0000003edb800000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003edb000000)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 跟着柴毛毛学Spring(4)——面向切面编程![这里写图片描述](http://img.blog.csdn.net/20171031111402095)

    面向切面编程简介 1. 什么是面向切面编程?   面向切面编程是Spring的第二大特性,它能将一个函数中非主体但有很必要的代码封装到一个单独的类中,在程序运行...

    大闲人柴毛毛
  • 三分钟理解“命令模式”——设计模式轻松掌握

    什么是命令模式? 假设现在有一个请求处理类(低层类/第三方类),如果客户端拿到这个类之后直接调用它,那么客户端和这个请求处理类之间的藕合度过高。 ? 这时候我们...

    大闲人柴毛毛
  • 深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)

    IoC与DI IoC和DI是Spring的两个核心概念,很多人都把它们视为相同的东西,但事实并非如此。 IoC(Inversion of Control)...

    大闲人柴毛毛
  • AI香水来了,你会买吗?

    “A woman who doesn’t wear perfume has no future.”—from Coco Chanel

    用户2908108
  • 表单多文件上传样式美化 && 支持选中文件后删除相关项

    本文根据一个例子,对多文件的上传样式做了一些简单的美化(其实也没怎么美化。。),同时支持选择文件后自定义删除相关的文件,最后再上传

    书童小二
  • lazyload图片延迟加载 适用所有类型

    LazyLoad大家再熟悉不 过的一个jquery插件了,它可以延迟加载长页面中的图片. 也就是说在浏览器可视区域外的图片不会被载入,直到用户将页面...

    Erwin
  • 项目中对图片的缩放和水印效果

    ///<summary> /// 获取一个图片按等比例缩小后的大小。 ///</summary> ///<param name="maxWidth">需要缩小到...

    Porschev
  • (1)并发编程实现的基础

    #允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,...

    py3study
  • [深度学习工具]·音频特征提取pyAudioAnalysis工具包

    链接:http://www.cnblogs.com/xingshansi/p/6806637.html

    小宋是呢
  • 零基础学Flink:Join两个流

    《零基础学Flink》这个系列已经做了不少篇了,接下来几章会更加贴近案例来说明一些功能,今天我们先来说说如何将两个流join起来。这次我们以实时汇率和订单流合并...

    麒思妙想

扫码关注云+社区

领取腾讯云代金券