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代码吧,有时比你在搜索引擎上反复搜来搜去还节省时间,慢就是快。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容