Linux源码安装步骤
Linux上几乎所有的软件都经过了GPL授权,因此几乎所有的软件都会提供源码。
而一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。
软件编译过程
将源码编译成可供Linux运行的二进制文件一共需要两步:
1. 使用gcc编译器将源码编译成目标文件
2. 再次使用gcc编译器将目标文件链接成二进制文件
这过程看似简单,实则不然。一个软件的源代码往往被封装在多个源文件中,此外这些文件有错综复杂的依赖关系,编译需要严格按照指定的顺序进行,这无疑增加了编译的难度。好在make命令可以帮助我们简化编译过程。
整个编译过程被浓缩在Makefile文件中(告诉make命令需要怎么去编译和链接程序),当执行make命令时,make会去当前目录中寻找Makefile文件,并根据该文件中的要求完成整个编译过程。
而Makefile文件由configure命令产生。当执行configure命令时,configure会根据当前系统环境动态生成一个适合本系统的Makefile文件,供make命令使用。
Linux源码安装步骤
- 获取源码
将软件的源码下载至/usr/local/,并解压。 - 查看INSTALL与README文件
解压后查看INSTALL与README文件,这两个文件中详细介绍了本软件的安装方法和注意事项。 - 创建Makefile文件
执行configure命令,生成Makefile文件。 - 编译
执行make clean;make命令将源码编译成二进制文件。
PS:make clean命令用来清除上一次编译生成的目标文件。这个步骤可有可无,但为了确保编译的成功,还是加上为好。防止由于软件中含有残留的目标文件导致编译失败。 - 安装
执行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,从Makefile中读取指令,编译源码
make clean; make
此时make会读取Makefile文件,将源码编译成二进制文件,并存放在当前目录下。
6.执行make install,将软件安装至指定目录
make install
此时二进制文件会被安装到先前configure prefix参数设置的路径中去。
安装完成!
cmake命令
cmake就是一个与make同级别的编译工具,只不过它依靠的不是Makefile作为编译规则,而是根据CMakeLists.txt来编译的。
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。
CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。
如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。
a) 编写 CmakeLists.txt。
b) 执行命令"cmake PATH"或者"ccmake PATH"生成 Makefile ( PATH 是 CMakeLists.txt 所在的目录 )。
[root@localhost mariadb-10.0.34]# cmake . -LH # "."表示编译当前目录,打印参数选项
列子:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_DATADIR=/usr/local/mysql/data/ -DEFAULT_CHARSET=utf8 -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DWITH_DEBUG=0 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_USER=mysql
上述参数:
-DCMAKE_INSTALL_PREFIX=/data/mysql 准备安装到那里
-DEFAULT_CHARSET=utf8 默认的字符集
-DMYSQL_TCP_PORT=3306 数据库的监听端口
-DMYSQL_UNIX_ADDR=/tmp/mysql3306.sock 本机连回数据库的unix socket
-DWITH_DEBUG=0 关闭debug模式
-DWITH_INNOBASE_STORAGE_ENGINE=1 打开innodb引擎
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@iZ231tx6fm4Z tomcat]# ldd /usr/bin/passwdlinux-vdso.so.1 (0x00007fff3adff000)libuser.so.1 => /usr/lib64/libuser.so.1 (0x00007f6428bd5000)libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f642899d000)libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f6428751000)libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f642854e000)libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f6428249000)libpopt.so.0 => /lib64/libpopt.so.0 (0x00007f6428040000)libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007f6427e3c000)libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f6427c20000)libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f6427a01000)libc.so.6 => /lib64/libc.so.6 (0x00007f642765b000)libpam.so.0 => /lib64/libpam.so.0 (0x00007f642744d000)libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f6427249000)librt.so.1 => /lib64/librt.so.1 (0x00007f642702e000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6426e11000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f6426c0d000)/lib64/ld-linux-x86-64.so.2 (0x00007f6428dee000)
原文:https://www.cnblogs.com/benwu/articles/8436209.html
Linux源码安装步骤相关推荐
- linux怎么用源码安装mysql,Linux源码安装mysql步骤
创建文件夹: mkdir /usr/local/webserver 安装必要依赖包 yum -y install gcc gcc-c++ make ncurses-devel 安装cmake包: t ...
- linux 源码安装 zip/unzip
linux 源码安装 zip/unzip 场景说明 Linux服务器,没有root权限 需要使用zip/unzip,但遗憾的是服务器没有安装 解决办法 自己用源码编译 步骤 下载zip/unzip的源 ...
- Linux源码安装mysql 5.6.12(cmake编译)
转载链接:http://www.2cto.com/database/201307/229260.html Linux源码安装mysql 5.6.12(cmake编译) 1.安装make编译器(默认系统 ...
- Linux源码安装软件
Linux源码安装软件 源码安装:最原始最有效的安装方式 三部曲 (1)-./configure xxx 生成makefile文件,随后需要的安装信息都是从这一步中获取 (2)make 根据makef ...
- linux 源码安装mysql5.7_linux安装mysql5.7.27
一.卸载 mysql安装有三种方式,包括二进制包安装(Using Generic Binaries).RPM包安装.源码安装.一般是前两种比较多 二.安装 建议路径设置按照写的来 将下载的压缩包复制到 ...
- Linux源码安装Python3.7出现的各种坑
前言 自己在Linux安装过很多次Python,每次都会由于各种各样的原因出现很多问题,很无奈 安装流程 去这里先看看有哪些可用版本可用下载 下载 sudo wget http://www.pytho ...
- Linux源码安装软件包时--prefix的配置建议
我们知道,使用源码安装软件包时通常会提供一个config或configure脚本对安装进行一些必要的配置,其中最为常见的是–prefix选项,它用于指定软件安装的父级目录,也就是将软件安装在哪个文件夹 ...
- linux源码安装nginx
任务目标:源码安装nginx,作为web服务修改配置文件,让配置生效,验证配置 首先要去官网nginx.org下载一个tar包: tar xvf 解包 进入到解包出来的目录,对configure进行配 ...
- Linux+Apache2.4+PHP5.6+MySQL5.6源码安装步骤
一.安装Apache 若要安装apache服务器软件,需要安装以下几个依赖软件 apr-1.4.6.tar.gz 下载地址:http://apr.apache.org/ apr-util-1.4.1. ...
最新文章
- 浅谈tidb事务与MySQL事务之间的区别
- Oracle 10g 中通过DBLink访问MySQL数据库
- Ansible — 编程 — 条件与循环
- jps查看java进程以及pwdx通过pid查看进程所在位置
- 数字图像处理与Python实现笔记之图像特征提取
- 32位机器下面各类型的取值范围(sizeof值)
- anaconda版本选择_Python环境搭建之Anaconda快速学习
- jquery项目源码_第一个jQuery程序
- mysql的游标处理_MySQL存储过程 游标 错误处理的示例代码
- Ananagrams (多种stl)
- 3. 说清 Observable
- cs231n图像分类笔记(上)学习记录
- CSS实现背景图片自适应屏幕大小
- HRBUST 1212 乘积最大
- Connections could not be acquired from the unde...
- ubuntu安装过程中提示: the path is not vaild path to the gcc binary等gcc路径不对和kernel不存在?
- 我的收藏:第二章:程序员收入渠道
- vmware全屏后退出全屏快捷键
- ES 中时间日期类型 “yyyy-MM-dd HHmmss” 的完全避坑指南
- 解决 “8080“ 端口号被占用问题!
热门文章
- import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包
- VS 2012 如何发布 ASP.NET 网站到本地IIS
- Wpf拖动按钮实现(二)
- zabbix报错:Zabbix服务启动不了
- 排查Java线上服务故障的方法和实例分析
- 常用系统存储过程有:
- DefaultHashOperations multiget的一个坑
- iOS UI基础-6.0 UIActionSheet的使用
- leetcode 【 Search Insert Position 】python 实现
- Fibonacii数列,兔子问题