Linux下源代码的编译安装入门

在项目中同学难免要在Linux系统下编译源代码,一定会对命令行编译时遇到层出不穷的编译错误头痛不及,很难理解为何Linux系统会用如此变态的编译安装方式呢?

特别对于现在习惯了应用商店一键安装的同学来说,编译源代码简直就是恐怖的令人发指。其实这一点这正是Linux的魅力所在,本文是编译入门,所以不展开说,但简单来讲就是:Windows系统以及手机应用商店是面向终端用户,所以安装程序必须简单。不能够给普通用户设门槛,对于商业世界,每个用户都是;而Linux是面向程序员,采用瑞士军刀的复用思维,一个开源程序模块写好了全世界用,但是想把用这些程序模块拼凑起来一起用可不容易。

既然是编译安装入门,其实网络上可参考的资料文档并不少,这里我们主要是串联起来一个学习思路,如何编译安装,如何理解编译过程,如何处理编译中遇到的问题。然后配合相关实验更好掌握。

一、如何编译安装

一般来说首先要下载安装包,后缀名是 .tar.gz 结尾的用 tar 命令解压出一个源代码目录,进入源代码目录之后执行下面命令就可以

./configure
make
make install

也可以写成这样更酷的单行方式 ./configure && make && make install

对应实验
  • 玩具实验: 为体验这种方式,可以去 iperf 官网下载最新版本测速工具,编译安装试试,简单而容易完成。
  • 进阶实验: 可以去 ffmepg 官网下载最新版本,编译安装试试;没有它,就没有我们的音视频世界。

二、如何理解编译过程

  1. 首先参考文章 https://my.oschina.net/surjur/blog/349464 了解: Linux编译安装中configure、make和make install各自的作用 。 会加上 ./configure --prefix=/your_dir 这样的参数,或是理解 --enable--xxx --disable-xxx,至少你折腾起来也容易管理。
  2. 然后再通过文章,了解 源代码编译、链接和Makefile简介 ,这时应该对Makefile和编译过程应该有相关概念了。
对应实验
  • 玩具实验: 为更好的理解编译过程;需要手写一个Makefile文件,至少包含2-3个有作用的 .c .h 文件,完成编译过程。
  • 进阶实验: 大型项目目录通常会由多个目录组成。 可以试一下建立2-3个子目录,每个目录下包含单独的 Makefile 文件,再通过根目录的 Makefile 文件进行编译。

三、如何解决安装中遇到的问题

Linux安装中遇到的问题可以说千奇百怪,有N个Linux发行版本,有M个要编译的软件版本,遇到的问题就能变成至少 M * N 个。为了解决这些复杂问题,大概的思路如下:

1. 收集安装记录文档

应当收集好自己机器的环境版本 uname -a, 以及安装记录文档(含命令);
留存安装记录文档至少有两个好处:

  • 可以和别人的环境版本、文档对比,看看自己的问题出在何处
  • 安装一次不易,留存下来后,下次同样版本环境下复制粘贴代码就好,避免重复工作;不记录的情况下,一个参数不对,可以重新折腾上几个小时。现在理解为何网络上很多博客的安装日志吧,就是给自己和别人一个方便。

2. 从错误日志着手

  • 检查错误日志出现的位置,是 configure 还是 make 还是 make install 不同阶段解决的思路不一样。
  • 最简单粗暴的方法,把错误日志在Google上搜索一下, 变换一下关键词,排名前五的参考意义很大,第二页就不要看了。 别用度娘,别用度娘,别用度娘,重要的事情说三遍,执迷不悟想找莆田系医院就算了。什么,用不了谷歌,想把技术学好,这点困难解决不了您还怎么读研究生. 校园网里试试 ipv6 google 看看~

3. configure 错误

configure 错误通常和库依赖有关系, 简单粗暴的方法解决不了,那您就只能来一般粗暴的方法了。

  • 如果对应的库不是那么重要, 试试 configure --disable-xxx 把对应的库屏蔽掉。不知道 disable名称是什么? 别傻乎乎的试, 把所有参数输出到 configure --help > cofig.out 某个文件里就能看到了, 所有的 enable-xxx 都是可以 disable-xxx 的。
  • 如果您用的是 ubuntu, 需要熟悉包管理(这能另外开一篇文章),幸运的把对应的库用 apt-get 补齐了就能通过。
  • 如果 apt-get 包的版本不够新,自己去官网下载新版本的库编译安装呗,回顾‘一、如何编译安装’
  • 注意:有的时候库名称很容易得知,有的时候就是不太确认对应库的名称,这是个艺术,几句话不好说清楚,要从屏幕上的提示配合谷歌领悟了。

一般粗暴的方法解决不了,恭喜你,你是必须跳出 Linux 小白的境界啊。 configure 是用什么语言写的,需要研究一下bash 入门。打开 configure 文件,看看对应错误日志到底出现在哪一行。为什么过不去呢? 了解bash语法, echo 调试一下,有时就找到问题了。

安装完库之后,执行几个命令譬如 ldconfig等等也有作用,自行谷歌吧。

4. Make 错误

make错误通常和缺少库,或是对应库的目录设置有关。看看最后一条make命令。如果有了Makefile的基础,在研究下 gcc, g++等相关编译参数,把最后一条命令粘贴到命令行中,修订后执行一下,有时改变一下库指向就能执行编译通过了。

如果相关库或是命令修订后已经能正确编译执行的话, 这时你大概清楚错误的库指向发生何处,一般可以用下面几种方法解决

  • 修改 PKG_CONFIG_PATH
  • 创建正确的库文件软连接 ln -sf 你的库路径 make使用的库路径
  • 禁止PATH中搜索到旧版本的命令 mv 旧命令 旧命令+版本号
  • 修改Makefile(不推荐)

5. Make install

这步错误就少多了,有时是权限的问题 sudo make install 就好

对应实验
  1. 试试看编译个 nginx,加上几个模块,这是 internet 上使用最多的 http 服务器。
  2. 再挑战一下 vlc

6. 补充

  • 不知道对应版本的的时候: 执行 对应命令 --version 或是 -v 试一下; 或是 apt-get version 库名称
  • 不知道什么参数时,执行 对应命令 --help
  • 守着现成的编译命令和代码,直接看参数说明 --helpconfigure, Makfile代码吧,有时比你在搜索引擎上反复搜来搜去还节省时间,慢就是快。

你可能感兴趣的:(Linux下源代码的编译安装入门)