日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言

本文主要介紹在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

分享到:
標簽:軟件 Linux
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!