您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

Linux怎么通过源代码安装软件

时间:2019-08-02 09:14:45  来源:  作者:

前言

本文主要介绍在linux上怎样把源代码编译成机器可以识别的二进制文件。

首先,我们要理解为什么要编译软件。

Linux怎么通过源代码安装软件,终极技能之高手才这样做

 

编译软件的原理:把人类可读的代码翻译成为机器可以直接识别的二进制文件。

我们安装软件时,一定要编译吗?答案是否定的,因为完全可以使用别人编译好的程序直接安装到我们的系统中。比如常见的windows安装软件的方式就是直接下载别人编译好的二进制文件。例如,下载最新版的qq安装文件,qq.exe。

同样的,在Linux上一样可以使用这种方法安装,比如在红帽系列的系统上就可以下载.rpm文件进行安装。Debian系列的系统就可以在网上下载.deb文件在本地进行安装,比如Ubuntu系统。

如果需要安装一个软件,其实可以不需要编译,直接使用软件包管理工具安装即可,比如在centos上,安装xxx软件。

[root@centos7 ~]# yum -y install xx
Linux怎么通过源代码安装软件,终极技能之高手才这样做

 

Ubuntu系统使用apt命令安装

oucanrong@zcwyou:~$ sudo apt install -y xxx

那么问题来了,有这样方便的安装方式,为什么还要费劲去编译一个软件呢?

原因是有以下几种情况需要手动编译软件:

  • 系统默认仓库没有这个软件
  • 系统默认仓库的软件过时或者版本太旧不能满意使用要求,比如在Ubuntu 18.04默认仓库上的youtube-dl,已经过时并不能正常使用。
  • 软件作者需要发布编译好的二进制包。

本文演示的案例均在CentOS7.6系统上进行记录。

编译案例

FFmpeg 是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat,libavformat是一个音频与视频格式转换库。

安装编译工具及ffmpeg的依赖包。

[root@centos7 ~]# yum install -y automake autoconf libtool gcc gcc-c++ yasm bzip2 make svn git
Linux怎么通过源代码安装软件,终极技能之高手才这样做

 

成功安装编译工具

解释:

通用的编辑工具集:

  • make
  • automake
  • autoconf
  • libtool
  • gcc
  • gcc-c++
  • bzip2
  • wget

bzip2用于解压缩bzip2文件

wget用于连接http/https/ftp等协议

ffmpeg本身需要的依赖包,这个需要提前查清楚

  • yasm

远程源码仓库连接工具:

  • svn
  • git
[root@centos7 ~]# wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
Linux怎么通过源代码安装软件,终极技能之高手才这样做

 

正在下载最新版本的ffmpeg等待编译

解压压缩包内容:

[root@centos7 ~]# tar jxvf ffmpeg-4.1.tar.bz2

解压时可以看到很的.c后缀的文件,表示这是C语言写的程序

进入解压后的目录

[root@centos7 ~]# cd ffmpeg-4.1

编辑、编译和安装

[root@centos7 ffmpeg-4.1]# ./configure && make && make install

解释以上命令:

./configure表示软件配置,比如编译哪些组件、开启哪些功能、编译成功后安装到哪些目录等等。

make表示开始编译,把人类可读的代码编译为机器识别的二进制码。

make install编译成功后,把相关的二进制文件、帮助文件等等内容复制到指定目录。

编译一般需要比较长时间,类似于以下输出。

INSTALL libavutil/tree.h

INSTALL libavutil/twofish.h

INSTALL libavutil/version.h

INSTALL libavutil/xtea.h

INSTALL libavutil/tea.h

INSTALL libavutil/lzo.h

INSTALL libavutil/avconfig.h

INSTALL libavutil/ffversion.h

INSTALL libavutil/libavutil.pc

Linux怎么通过源代码安装软件,终极技能之高手才这样做

 

正在编译最新版的ffmpeg

查看ffmpeg的程序位置

[root@zcwyou ffmpeg-4.1]# which ffmpeg

/usr/local/bin/ffmpeg

可以看出,ffmpeg已经编译好了,并且已经复制到了/usr/local/bin/

[root@zcwyou ffmpeg-4.1]# ffmpeg

ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers

built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)

configuration:

libavutil 56. 22.100 / 56. 22.100

libavcodec 58. 35.100 / 58. 35.100

libavformat 58. 20.100 / 58. 20.100

libavdevice 58. 5.100 / 58. 5.100

libavfilter 7. 40.101 / 7. 40.101

libswscale 5. 3.100 / 5. 3.100

libswresample 3. 3.100 / 3. 3.100

Hyper fast Audio and Video encoder

usage: ffmpeg [options][[infile options] -i infile]… {[outfile options] outfile}…

Use -h to get full help or, even better, run 'man ffmpeg'

Linux怎么通过源代码安装软件,终极技能之高手才这样做

 

查看ffmpeg的版本

查看ffmpeg依赖哪些动态库

[root@zcwyou ffmpeg-4.1]# ldd ffmpeg

linux-vdso.so.1 => (0x00007ffc454d7000)

libm.so.6 => /lib64/libm.so.6 (0x00007fe6c8f6b000)

libxcb.so.1 => /lib64/libxcb.so.1 (0x00007fe6c8d43000)

libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007fe6c8b3f000)

libxcb-shape.so.0 => /lib64/libxcb-shape.so.0 (0x00007fe6c893b000)

libxcb-xfixes.so.0 => /lib64/libxcb-xfixes.so.0 (0x00007fe6c8733000)

libva.so.1 => /lib64/libva.so.1 (0x00007fe6c8513000)

libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fe6c8303000)

libz.so.1 => /lib64/libz.so.1 (0x00007fe6c80ed000)

liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fe6c7ec7000)

libva-drm.so.1 => /lib64/libva-drm.so.1 (0x00007fe6c7cc4000)

libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe6c7aa8000)

libc.so.6 => /lib64/libc.so.6 (0x00007fe6c76db000)

/lib64/ld-linux-x86-64.so.2 (0x00007fe6c926d000)

libXau.so.6 => /lib64/libXau.so.6 (0x00007fe6c74d7000)

libdl.so.2 => /lib64/libdl.so.2 (0x00007fe6c72d3000)

libdrm.so.2 => /lib64/libdrm.so.2 (0x00007fe6c70c1000)

Linux怎么通过源代码安装软件,终极技能之高手才这样做

 

查看ffmpeg依赖哪些动态库

如果提示没有找到某某动态库,继续使用yum/RPM/源码安装的方式安装对应的动态库,否则程序不能正常运行。

 

总结

至此,已经把一个C程序的源代码文件编译成为二进制文件。现在可以直接使用ffmpeg最新版了。

本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:

https://www.linuxrumen.com/rmxx/920.html



Tags:Linux 软件   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
小伙伴们,你们在Linux系统安装软件,是怎么解决依赖问题的呢,今天安装suitecrm,一起来看一看吧!suitecrm是一个php开发的客户管理软件,在安装suitecrm前,需要配置php开发环境,安装时...【详细内容】
2020-11-23  Tags: Linux 软件  点击:(129)  评论:(0)  加入收藏
linux操作系统开源免费,简单易用,干净流畅,深受大家的喜爱。今天我来给大家介绍一些ubuntu下面的一些好用的软件。1.vlc万能播放器:支持倍速播放,支持各种格式视频的播放安装:sud...【详细内容】
2019-12-23  Tags: Linux 软件  点击:(124)  评论:(0)  加入收藏
前言本文主要介绍在Linux上怎样把源代码编译成机器可以识别的二进制文件。首先,我们要理解为什么要编译软件。 编译软件的原理:把人类可读的代码翻译成为机器可以直接识别的二...【详细内容】
2019-08-02  Tags: Linux 软件  点击:(355)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(41)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条