又见面啦~
我们今天开始接触一些更高级的Linux知识
一般在日常的IT生活中,很多时候是需要我们在源码的环境下编译安装一个软件的
这也是Open Source的一个特点,Windows中其他闭源软件是不会提供这种源码编译安装的安装方式的
那么程序的构建一般会经历一下几个阶段
配置
配置的意思是检查当前环境是否满足安装该软件的依赖关系,上面那个算是特点,那这个算是一个Open Source的一个弊病
因为开源软件的作者很多时候,用的都是其他开源的<库>或者<依赖>来构建自己的程序,当我们要运行他们的软件的时候,就需要我们检查我们的系统中有没有这些<库>或者<依赖>了
当然,还有设置我们一些安装必须的信息,如安装路径,需要安装的组件等等
配置完成之后,会生成makefile供第二部的make使用
一般开源软件的作者会提供一个configure文件,这个文件是软件作者通过autotool等等工具生成的
关于configure文件的生成设计到了其他工具的使用和CC++的知识,这里就不深入介绍了
我们可以通过以下命令来查看configure文件的可用选项
./configure --help
或者我们可以配置我们的程序安装路径
./configure --prefix=/usr/local/my
当然,一般安装我直接使用作者默认的配置就好了
./configure
这样程序就会自动检测我们的系统环境,同时会列出我们缺少的文件
这里我们用一个名字叫Shadow的软件来做演示
我们从作者的网站下载这个软件之后,解压,进去,会发现里面的的结构大概如下
我们按照上面说的执行./configure看看
之后我们就可以看到,configure文件开始检测系统环境满不满足安装需求
一般作者会在其Github上给出需要安装的依赖包,我们根据着我们的系统版本去找就可以了
比如这里,我们可以在Github上找到作者提供的以下内容
因为我们这里系统是Fedora & RHEL类的,所以我们点这里就可以看到要安装的依赖了
我们安装就可以了,如果作者比较懒,那我们就根据configure的提示,一个一个依赖的安装
安装依赖完成之后,我们再执行./configure就不会出现error了
(我悄悄换了台安装好依赖的机器~)
之后我们就可以进行下一步了,编译
编译
顾名思义,编译就是将源文件进行编译链接生成可执行程序
执行我们刚刚上面那个配置之后
在文件夹会出现一个makefile文件
大家可能会说,我们刚刚明明看到了makefile文件了,ok,我们对比一下执行完configure之前和之后的区别
以下是没执行之前的,的确是有Makefile.am和Makefile.in两个文件,但是,这并不是makefile
关于这两个文件如果用过automake的同学就清楚了(不过这种同学也不会来看这种文章哈哈哈)
然后下面的是我们执行完./configure之后的
已经多了好几个文件出来,但是最重要的是有了Makefile这个文件
我们这里就不说Makefile是怎么写的,这个比较复杂,一般要写C语言超过一年以上的同学才乱得清楚,而且对于用户来说,没必要知道程序的编译过程
然后,我们还要知道的是,Linux中make命令会自动去当前目录下查找Makefile或者makefile字样的文件去加载
一般需要链接的库或者头文件少的代码,可以手动写makefile,这样就省去了第一步<配置>的功夫
但是对于依赖比较多,而且代码结构复杂的,最好还是用程序自动生成的makefile
这里稍微介绍一个Linux下编译文件
假设我们有个C文件叫linux-test.c,那怎么编译它
可以用gcc命令
gcc linux-test.c -o lt
这里的linux-test.c就是我们写好的代码,然后-o之后接的是我们希望这个编译后的程序的名字,这里是lt
如果你写的是C++,要用g++命令
ok,我们继续编译,一个文件我们可以用gcc,但是一堆文件的编译,我们就要用make了
现在我们有了Makefile文件,我们就可以执行make了
这样程序就会自动链接和编译文件了
最后等待一会,编译完成
安装
安装在Linux中就简单多, 如果你做完上面的几个步骤,只用把生成的可执行程序拷贝到你想拷贝的地方即可
但是我们有个简单的命令
make install
其实install就是Makefile中的一个规则,我们可以打开Makefile来查看或者编辑,但是这是不建议的
之后程序就会自动复制到了代码编写者想让它去的地方了~
之后我们的程序就算安装完成了~
本文完
原文始发于微信公众号(玄魂工作室):Hacker基础之Linux篇:进阶Linux命令一
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论