<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux 下編譯 VLC

          共 12050字,需瀏覽 25分鐘

           ·

          2020-08-21 08:59

          編譯 VLC 簡(jiǎn)單嗎?Wiki 這樣說(shuō):“Compiling VLC is not an easy task.”O(∩_∩)O哈哈~反正各種坑。話雖如此,但也不用太過(guò)擔(dān)心,因?yàn)楣俜教峁┝司幾g教程。雖然有些過(guò)時(shí),但很多地方還是值得參考的!



          下面以最新發(fā)布的 VLC 正式版為例,記錄一下 Linux 下編譯的詳細(xì)過(guò)程,以供大家作后續(xù)參考(Good luck),具體環(huán)境如下:


          • Ubuntu 18.04 LTS

          • VLC 3.0.8


          注意:對(duì)于 VLC 中的各種依賴及其版本要求,可查看 VLC 源碼中的 configure.ac 文件。



          1

          準(zhǔn)備環(huán)境


          VLC 需要 C11 編譯器,開(kāi)發(fā)頭和工具鏈。


          建議使用 gcc(版本 >= 4.9),當(dāng)然 clang/LLVM 也是可以的。


          如果從 Git 倉(cāng)庫(kù)構(gòu)建,則還需要 GNU 構(gòu)建系統(tǒng),即“autotools”(autoconf、automake、libtool 和 gettext)來(lái)設(shè)置 Makefile。要確保它們是最新的,并且要可用于自己的系統(tǒng)。


          $?sudo?apt-get?install?git?build-essential?pkg-config?libtool?automake?autopoint?gettext



          2

          獲取 VLC 源碼


          選擇待編譯的 VLC 版本,這一點(diǎn)至關(guān)重要,那就簡(jiǎn)單說(shuō)說(shuō)吧:


          • 開(kāi)發(fā)版:雖然不太穩(wěn)定,但一般會(huì)提供許多新功能。除非有特殊需求,否則不建議在生產(chǎn)環(huán)境中使用。

          • 穩(wěn)定版(目前為止,最新版是 3.0.8):這是正式發(fā)布的版本,相對(duì)比較穩(wěn)定,可以在生產(chǎn)環(huán)境中使用。

          • 舊版本:不鼓勵(lì)使用,因?yàn)檫@些版本中的 bug 已不再修復(fù)。


          選擇 VLC 3.0.8,然后下載源代碼,解壓縮并進(jìn)入最終的目錄:


          $?wget?http://download.videolan.org/pub/videolan/vlc/3.0.8/vlc-3.0.8.tar.xz
          $?tar?xvJf?vlc-3.0.8.tar.xz
          $?cd?vlc-3.0.8



          3

          獲取第三方庫(kù)


          在配置 VLC 之前,要先確保其所需的依賴項(xiàng)都已就緒,否則可能導(dǎo)致 vlc 程序出現(xiàn)錯(cuò)誤。像下面這些就很重要:


          • ffmpeg(libavcodec、libavformat、libavutil):用于提供編解碼器

          • Qt:用于提供圖形用戶界面

          • xcb:用于 X11 下的視頻輸出

          • taglib:用于獲取多媒體文件信息

          • Lua:用于 VLC 擴(kuò)展的編程語(yǔ)言

          • ......


          要獲取這些依賴項(xiàng),建議使用以下命令,這也是官方推薦的方式:


          $?sudo?apt-get?build-dep?vlc


          倘若沒(méi)有指定代碼源,則會(huì)提示以下信息:




          >?正在讀取軟件包列表...?完成

          >?E:?您必須在?sources.list?中指定代碼源(deb-src)?URI




          這時(shí)需要打開(kāi)“軟件和更新”界面,選中下圖中的“源代碼”以及最佳的服務(wù)器(國(guó)內(nèi)建議選擇“中國(guó)的服務(wù)器”):



          完成之后,記得要“重新載入”以更新緩存。


          然后再次執(zhí)行上述命令,由于下載的軟件包過(guò)多,可能有些無(wú)法正常下載:




          ......

          E: 無(wú)法下載 http://cn.archive.ubuntu.com/ubuntu/pool/main/l/lua5.2/liblua5.2-dev_5.2.4-1.1build1_amd64.deb? 連接失敗 [IP: 91.189.91.24 80]

          E: 無(wú)法下載 http://cn.archive.ubuntu.com/ubuntu/pool/universe/libm/libmatroska/libmatroska-dev_1.4.8-1.1_amd64.deb? 連接失敗 [IP: 91.189.91.26 80]

          E: 無(wú)法下載 http://cn.archive.ubuntu.com/ubuntu/pool/universe/libd/libdc1394-22/libdc1394-22-dev_2.2.5-1_amd64.deb? 連接失敗 [IP: 91.189.91.14 80]

          E: 有幾個(gè)軟件包無(wú)法下載,要不運(yùn)行 apt-get update 或者加上 --fix-missing 的選項(xiàng)再試試?

          E: 無(wú)法處理構(gòu)建依賴關(guān)系




          按照提示運(yùn)行 sudo apt-get update,然后再次執(zhí)行上述命令,這時(shí)就能夠正常處理了:


          $?sudo?apt-get?build-dep?vlc
          正在讀取軟件包列表...?完成
          正在讀取軟件包列表...?完成
          正在分析軟件包的依賴關(guān)系樹(shù)???????
          正在讀取狀態(tài)信息...?完成???????
          下列【新】軟件包將被安裝:
          ??bison?debhelper?dh-autoreconf?dh-strip-nondeterminism?flex?gir1.2-harfbuzz-0.0?icu-devtools?liba52-0.7.4?liba52-0.7.4-dev
          ??libaa1-dev?libarchive-dev?libaribb24-0?libaribb24-dev?libasound2-dev?libass-dev?libass9?libatk-bridge2.0-dev?libatk1.0-dev
          ??libatspi2.0-dev?libavahi-client-dev?libavahi-common-dev?libavc1394-dev?libavcodec-dev?libavcodec57?libavformat-dev?libavformat57
          ??libavresample-dev?libavresample3?libavutil-dev?libavutil55?libbasicusageenvironment1?libbison-dev?libbluray-dev?libbluray2
          ??libcaca-dev?libcairo-script-interpreter2?libcairo2-dev?libcddb2?libcddb2-dev?libcdio-dev?libchromaprint-dev?libchromaprint1
          ??libcrystalhd-dev?libcrystalhd3?libdbus-1-dev?libdc1394-22?libdc1394-22-dev?libdca-dev?libdca0?libdouble-conversion1?libdrm-dev
          ??libdvbpsi-dev?libdvbpsi10?libdvdnav-dev?libdvdnav4?libdvdread-dev?libdvdread4?libebml-dev?libebml4v5?libegl1-mesa-dev
          ??libepoxy-dev?libevdev-dev?libexpat1-dev?libfaad-dev?libfaad2?libfile-stripnondeterminism-perl?libflac-dev?libfluidsynth-dev
          ??libfluidsynth1?libfontconfig1-dev?libfreetype6-dev?libfribidi-dev?libgcrypt20-dev?libgdk-pixbuf2.0-dev?libgl1-mesa-dev?libgles1
          ??libgles2-mesa-dev?libglib2.0-dev?libglib2.0-dev-bin?libglu1-mesa-dev?libglvnd-core-dev?libglvnd-dev?libgme0?libgmp-dev
          ??libgmpxx4ldbl?libgnutls-dane0?libgnutls-openssl27?libgnutls28-dev?libgnutlsxx28?libgpg-error-dev?libgraphite2-dev?libgroupsock8
          ??libgsm1?libgtk-3-dev?libharfbuzz-dev?libharfbuzz-gobject0?libice-dev?libicu-dev?libicu-le-hb-dev?libicu-le-hb0?libiculx60
          ??libidn11-dev?libidn2-0-dev?libidn2-dev?libinput-dev?libiso9660-10?libiso9660-dev?libjack-jackd2-dev?libjbig-dev?libjpeg-dev
          ??libjpeg-turbo8-dev?libjpeg8-dev?libkate-dev?libkate1?liblirc-dev?liblirc0?liblivemedia-dev?liblivemedia62?liblua5.2-0
          ??liblua5.2-dev?liblzma-dev?libmad0?libmad0-dev?libmatroska-dev?libmatroska6v5?libmicrodns-dev?libmicrodns0?libmpcdec-dev
          ??libmpcdec6?libmpeg2-4?libmpeg2-4-dev?libmpg123-dev?libmtdev-dev?libmtp-dev?libncurses5-dev?libncursesw5-dev?libnfs-dev?libnfs11
          ??libnotify-dev?libogg-dev?libomxil-bellagio-dev?libomxil-bellagio0?libopengl0?libopenjp2-7?libopenmpt-dev?libopenmpt-modplug-dev
          ??libopenmpt-modplug1?libopenmpt0?libopus-dev?libout123-0?libp11-kit-dev?libpango1.0-dev?libpcre16-3?libpcre3-dev?libpcre32-3
          ??libpcrecpp0v5?libpixman-1-dev?libplacebo-dev?libplacebo4?libpng-dev?libpostproc-dev?libpostproc54?libprotobuf-dev
          ??libprotobuf-lite10?libprotoc10?libpthread-stubs0-dev?libpulse-dev?libqt5concurrent5?libqt5core5a?libqt5dbus5?libqt5gui5
          ??libqt5network5?libqt5printsupport5?libqt5sql5?libqt5svg5?libqt5svg5-dev?libqt5test5?libqt5widgets5?libqt5x11extras5
          ??libqt5x11extras5-dev?libqt5xml5?libraw1394-dev?libreadline-dev?libresid-builder-dev?libresid-builder0c2a?librsvg2-dev
          ??libsamplerate0-dev?libsdl-image1.2?libsdl-image1.2-dev?libsdl1.2-dev?libsdl1.2debian?libsecret-1-dev?libset-scalar-perl
          ??libshine-dev?libshine3?libshout3-dev?libsidplay2?libsidplay2-dev?libslang2-dev?libsm-dev?libsmbclient-dev?libsnappy1v5
          ??libsndio-dev?libsndio6.1?libsoxr-dev?libsoxr-lsr0?libsoxr0?libspeex-dev?libspeexdsp-dev?libssh-gcrypt-4?libssh2-1?libssh2-1-dev
          ??libssl-dev?libswresample-dev?libswresample2?libswscale-dev?libswscale4?libsystemd-dev?libtag1-dev?libtasn1-6-dev?libtheora-dev
          ??libtiff-dev?libtiff5-dev?libtiffxx5?libtinfo-dev?libtwolame-dev?libudev-dev?libunbound2?libupnp-dev?libupnp6?libupnp6-dev
          ??libusageenvironment3?libusb-0.1-4?libusb-1.0-0-dev?libv4l-dev?libv4l2rds0?libva-dev?libva-drm2?libva-glx2?libva-wayland2
          ??libva-x11-2?libva2?libvcdinfo-dev?libvcdinfo0?libvdpau-dev?libvdpau1?libvncserver-config?libvncserver-dev?libvncserver1
          ??libvorbis-dev?libvulkan1?libwacom-dev?libwayland-bin?libwayland-dev?libwebp-dev?libx11-dev?libx11-xcb-dev?libx264-152
          ??libx264-dev?libx265-146?libx265-dev?libxau-dev?libxcb-composite0?libxcb-composite0-dev?libxcb-dri2-0-dev?libxcb-dri3-dev
          ??libxcb-glx0-dev?libxcb-keysyms1-dev?libxcb-present-dev?libxcb-randr0-dev?libxcb-render0-dev?libxcb-shape0-dev?libxcb-shm0-dev
          ??libxcb-sync-dev?libxcb-xfixes0-dev?libxcb-xinerama0?libxcb-xv0-dev?libxcb1-dev?libxcomposite-dev?libxcursor-dev?libxdamage-dev
          ??libxdmcp-dev?libxext-dev?libxfixes-dev?libxft-dev?libxi-dev?libxinerama-dev?libxkbcommon-dev?libxml2-dev?libxpm-dev
          ??libxrandr-dev?libxrender-dev?libxshmfence-dev?libxtst-dev?libxvidcore4?libxxf86vm-dev?libzvbi-common?libzvbi-dev?libzvbi0?lua5.2
          ??mesa-common-dev?nettle-dev?po-debconf?protobuf-compiler?python3-distutils?python3-lib2to3?qt5-qmake?qt5-qmake-bin?qtbase5-dev
          ??qtbase5-dev-tools?qtbase5-private-dev?qtchooser?wayland-protocols?x11proto-composite-dev?x11proto-core-dev?x11proto-damage-dev
          ??x11proto-dev?x11proto-fixes-dev?x11proto-input-dev?x11proto-randr-dev?x11proto-record-dev?x11proto-xext-dev
          ??x11proto-xf86vidmode-dev?x11proto-xinerama-dev?xorg-sgml-doctools?xtrans-dev?zlib1g-dev?zsh?zsh-common
          下列軟件包將被升級(jí):
          ??libarchive13?libexpat1?libidn2-0?libjpeg-turbo8?libnss-systemd?libpam-systemd?libpulse-mainloop-glib0?libpulse0?libpulsedsp
          ??libsmbclient?libssl1.1?libsystemd0?libtiff5?libudev1?libwbclient0?libxkbcommon-x11-0?libxkbcommon0?pulseaudio
          ??pulseaudio-module-bluetooth?pulseaudio-utils?samba-libs?systemd?udev
          升級(jí)了 23 個(gè)軟件包,新安裝了 329 個(gè)軟件包,要卸載?0?個(gè)軟件包,有 225 個(gè)軟件包未被升級(jí)。
          需要下載 2,711 kB/92.3 MB 的歸檔。
          解壓縮后會(huì)消耗 363 MB 的額外空間。
          您希望繼續(xù)執(zhí)行嗎??[Y/n] y
          獲取:1?http://cn.archive.ubuntu.com/ubuntu?bionic-updates/main?amd64?libqt5network5?amd64?5.9.5+dfsg-0ubuntu2.4?[634?kB]
          獲取:2?http://cn.archive.ubuntu.com/ubuntu?bionic/universe?amd64?libx265-146?amd64?2.6-3?[1,026?kB]????????????????????????????????
          獲取:3?http://cn.archive.ubuntu.com/ubuntu?bionic/universe?amd64?libfluidsynth1?amd64?1.1.9-1?[137?kB]?????????????????????????????
          獲取:4?http://cn.archive.ubuntu.com/ubuntu?bionic-updates/main?amd64?libidn11-dev?amd64?1.33-2.1ubuntu1.2?[520?kB]?????????????????
          獲取:5?http://cn.archive.ubuntu.com/ubuntu?bionic/universe?amd64?libusageenvironment3?amd64?2018.02.18-1?[6,944?B]?????????????????
          獲取:6?http://cn.archive.ubuntu.com/ubuntu?bionic/main?amd64?liblua5.2-dev?amd64?5.2.4-1.1build1?[134?kB]??????????????????????????
          獲取:7?http://cn.archive.ubuntu.com/ubuntu?bionic/universe?amd64?libmatroska-dev?amd64?1.4.8-1.1?[144?kB]??????????????????????????
          獲取:8?http://cn.archive.ubuntu.com/ubuntu?bionic/universe?amd64?libdc1394-22-dev?amd64?2.2.5-1?[109?kB]???????????????????????????
          已下載?896?kB,耗時(shí)?34秒?(26.7?kB/s)???????????????????????????????????????????????????????????????????????????????????????????????
          正在從軟件包中解出模板:100%
          正在預(yù)設(shè)定軟件包?...
          (正在讀取數(shù)據(jù)庫(kù) ... 系統(tǒng)當(dāng)前共安裝有 134279 個(gè)文件和目錄。)
          正準(zhǔn)備解包?.../libsystemd0_237-3ubuntu10.33_amd64.deb??...
          正在將?libsystemd0:amd64?(237-3ubuntu10.33)?解包到?(237-3ubuntu10.24)?上?...
          正在設(shè)置?libsystemd0:amd64?(237-3ubuntu10.33)?...
          (正在讀取數(shù)據(jù)庫(kù) ... 系統(tǒng)當(dāng)前共安裝有 134279 個(gè)文件和目錄。)
          正準(zhǔn)備解包?.../libpam-systemd_237-3ubuntu10.33_amd64.deb??...
          正在將?libpam-systemd:amd64?(237-3ubuntu10.33)?解包到?(237-3ubuntu10.24)?上?...
          正準(zhǔn)備解包?.../libnss-systemd_237-3ubuntu10.33_amd64.deb??...
          正在將?libnss-systemd:amd64?(237-3ubuntu10.33)?解包到?(237-3ubuntu10.24)?上?...
          正準(zhǔn)備解包?.../systemd_237-3ubuntu10.33_amd64.deb??...
          正在將?systemd?(237-3ubuntu10.33)?解包到?(237-3ubuntu10.24)?上?...
          正準(zhǔn)備解包?.../udev_237-3ubuntu10.33_amd64.deb??...
          正在將?udev?(237-3ubuntu10.33)?解包到?(237-3ubuntu10.24)?上?...
          ......
          ......
          ......
          正在設(shè)置?dh-strip-nondeterminism?(0.040-1.1~build1)?...
          正在設(shè)置?libpango1.0-dev?(1.40.14-1ubuntu0.1)?...
          正在設(shè)置?libgtk-3-dev:amd64?(3.22.30-1ubuntu4)?...
          正在處理用于?libc-bin?(2.27-3ubuntu1)?的觸發(fā)器?...
          正在處理用于?initramfs-tools?(0.130ubuntu3.8)?的觸發(fā)器?...
          update-initramfs:?Generating?/boot/initrd.img-5.0.0-23-generic


          這個(gè)過(guò)程耗時(shí)比較長(zhǎng),耐心等待吧!



          4

          編譯 VLC


          配置步驟用于檢測(cè)系統(tǒng)是否能夠編譯 VLC。對(duì)大多數(shù)用戶來(lái)說(shuō),./configure 不需要任何命令行選項(xiàng)。默認(rèn)情況下,它會(huì)根據(jù)檢測(cè)到的庫(kù)是否可用來(lái)自動(dòng)選擇要編譯的特性。


          例如,如果無(wú)法在系統(tǒng)上檢測(cè)到 taglib,那么 configure 腳本將會(huì)禁用該模塊(因?yàn)樗鼰o(wú)法編譯)。除此之外,還可以通過(guò)傳遞正確的參數(shù)來(lái)啟用/禁用某些特性:


          • --enable-*(或者 --disable-*):有很多這樣的參數(shù),通過(guò) ./configure --help 即可查看。其中,enable 表示啟用,disable 則表示禁用。

          • --enable-debug:啟用調(diào)試符號(hào)。如果想調(diào)試 VLC,該參數(shù)將非常有用;但如果是生產(chǎn)環(huán)境,盡量不要使用。


          $?./configure


          注意:如果庫(kù)不在默認(rèn)目錄,也不在 vlc 源碼所在目錄,為了使 ./configure 找到這些庫(kù),需要用 PKG_CONFIG_PATH 去指定它們的路徑。


          當(dāng)配置完成之后,就可以編譯安裝 VLC 了:


          $?sudo?make?-j4
          $?sudo?make?install


          為了提高編譯速度,這里使用了 -j4,以啟用多核編譯。



          5

          檢查 VLC


          當(dāng)安裝完成之后,記得檢查 VLC 能否正常使用,先來(lái)看一下版本信息:


          $?vlc?--version
          vlc:?error?while?loading?shared?libraries:?libvlc.so.5:?cannot?open?shared?object?file:?No?such?file?or?directory


          加載動(dòng)態(tài)庫(kù)失敗,沒(méi)關(guān)系,重新配置一下即可:


          $?sudo?/sbin/ldconfig


          再次嘗試一下,版本信息就可以正常顯示了:


          $?vlc?--version
          VLC?media?player?3.0.8?Vetinari?(revision?3.0.8-0-gf350b6b5a7)
          VLC?版本?3.0.8?Vetinari?(3.0.8-0-gf350b6b5a7)
          編譯者?waleon?編譯時(shí)間?waleon-virtual-machine?(Dec?18?2019?14:54:42)
          編譯器:?gcc?version?7.4.0?(Ubuntu?7.4.0-1ubuntu1~18.04.1)
          本程序在法律許可范圍內(nèi)?*無(wú)任何擔(dān)保*。
          您可以依照 GNU GPL 許可證的條款再次分發(fā)本程序;
          詳情請(qǐng)參閱名為 COPYING 的文件。
          由 VideoLAN 團(tuán)隊(duì)編寫;參見(jiàn) AUTHORS 文件。


          如果想啟動(dòng)播放器,可以使用 vlc 命令:


          $?vlc


          打開(kāi)網(wǎng)絡(luò)串流,并輸入一個(gè)網(wǎng)絡(luò) URL:



          O(∩_∩)O哈哈~,可以正常使用了,看起來(lái)還不錯(cuò)吧!



          6

          常見(jiàn)問(wèn)題


          如果你自己手動(dòng)下載依賴項(xiàng),那么在編譯 VLC 時(shí)難免會(huì)出現(xiàn)各種問(wèn)題,以下是最常見(jiàn)的一些問(wèn)題以及對(duì)應(yīng)的解決方案(都是坑啊,第一次我也遇到了不少)。



          缺少 Lua




          configure: error: Could not find lua. Lua is needed for some interfaces (rc, telnet, http) as well as many other custom scripts. Use --disable-lua to ignore this error.




          解決方案:


          $?sudo?apt-get?install?lua5.2?liblua5.2-dev



          缺少 liba52




          configure: error: Could not find liba52 on your system: you may get it from http://liba52.sf.net/. Alternatively you can use --disable-a52 to disable the a52 plugin.




          解決方案:


          $?sudo?apt-get?install?liba52-dev



          XCB 問(wèn)題




          configure: error: Package requirements (xcb >= 1.6) were not met:

          No package 'xcb' found




          解決方案:


          $?sudo?apt-get?install?libxcb-shm0-dev?libxcb-xv0-dev?libxcb-keysyms1-dev?libxcb-randr0-dev?libxcb-composite0-dev



          缺少 alsa




          configure: error: No package 'alsa' found. alsa-lib 1.0.24 or later required. Pass --disable-alsa to ignore this error.




          解決方案:


          $?sudo?apt-get?install?libalsa-ocaml-dev?


          以為就這些錯(cuò)誤?不不不,可能還有更多的坑在等著你。所以呢,還是建議用官方推薦的方式獲取依賴,不要自己給自己找麻煩哦!



          7

          更多參考


          有關(guān) VLC 的源碼、編譯/配置等相關(guān)內(nèi)容,也可以參考以下資料,里面都有很詳細(xì)的說(shuō)明:


          • VLC 下載(正式版):http://download.videolan.org/pub/videolan/vlc/

          • VLC 下載(Nightly 版):https://nightlies.videolan.org/build/

          • VLC 編譯(針對(duì)各平臺(tái)):https://wiki.videolan.org/Category:Building/

          • VLC 編譯(針對(duì) Unix):https://wiki.videolan.org/UnixCompile/

          • VLC 配置:https://wiki.videolan.org/Configure/

          • VLC 依賴(完整版):https://wiki.videolan.org/Contrib_Status/

          • VLC-3.0.8 依賴:http://www.linuxfromscratch.org/blfs/view/svn/multimedia/vlc.html


          ·END·
          ?



          作者:一去、二三里


          愛(ài)學(xué)習(xí),愛(ài)編程,愛(ài)生活。

          ?


          歡迎來(lái)撩,一起暢談程序人生!

          ?


          點(diǎn)個(gè)在看,么么噠!

          瀏覽 1052
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  变态另类TS人妖一区二区 | 内射学生妹视频在线 | 成人污污| 77777亚洲熟妇 | 一级黄色免费观看 |