VLC编译记录 Ubuntu16.04

环境:

·      Ubuntu16.04

·      gcc (Ubuntu5.4.0-6ubuntu1~16.04.9) 5.4.0

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

    builtwith gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609

configuration:--enable-gpl --enable-version3 --enable-nonfree --enable-pic --enable-shared--enable-static --enable-libx264 --enable-libx265

libavutil      55. 78.100 / 55. 78.100

libavcodec     57.107.100 / 57.107.100

libavformat    57. 83.100 / 57. 83.100

libavdevice    57. 10.100 / 57. 10.100

libavfilter    6.107.100 /  6.107.100                 

libswscale      4. 8.100 /  4.  8.100

libswresample   2. 9.100 /  2.  9.100

libpostproc    54. 7.100 / 54.  7.100

·      protobuf-2.4.1

·      qt-5.7.0(.run 安装方式)

 

这次编译过程主要是跟着官方教程,但是因为官方教程比较老旧,会遇到很多问题,所以把这次的编译过程记录下来。

 

1.       准备环境

VLC需要C11编译器,开发头文件和工具链。

建议使用gcc(版本4.9或更高版本),但是也可以使用clang / LLVM。

如果您从Git仓库构建,您还需要GNU构建系统,即“autotools”(autoconf,automake,libtool和gettext)来设置Makefiles。确保它们是最新的并可用于您的系统。


%sudo apt-get install git build-essential pkg-config libtool automakeautopoint gettext

 

2.       获取源代码

首先获取源代码,使用Git来跟踪VLC开发。

%git clone git://git.videolan.org/vlc.git

%cd vlc

%./bootstrap

 

3.       获取第三方库

现在你几乎可以配置 VLC构建。但首先,您需要确保所有必需的依赖关系都已到位。您必须安装并启用您需要的所有第三方库。如果您未能安装所需的库,则最终可能会导致VLC应用程序出现故障。

$sudo apt-get build-dep vlc

 

4.       配置

./configure用于检查你的系统是否能够编译VLC。您也可以选择构建中的功能。提醒一下,该命令将显示各种选项:

%./configure --help

对于大多数用户来说,./configure不需要任何命令行选项。

默认情况下,要编译的功能是根据检测到的可用库自动选择的。如果首先编译了贡献,则所产生的VLC将具有合理的功能。

请注意,为了使./configure找到它们,必须为pkg-config知道不在默认前缀中且不在vlc contrib中的库。为此使用PKG_CONFIG_PATH。

有一些功能在默认情况下被禁用(未编译)。如果你想要他们,他们必须通过使用配置标志强制。您可以通过在./configure --help中搜索“disabled”来找到这些功能的列表。、

 

5.       编译

编译VLC:

%make

你不需要安装VLC来使用它。你也可以简单地从build目录运行它:

#./vlc

如果你真的想将VLC安装到系统中,以root身份运行:

#make install

以上是大致的编译过程,但是在第一遍编译过程中还是有很多问题,比如:

 

ERROR#1:

未安装库的错误:

 

未安装LUA:LUA byte compiler missing

sudoapt-get install lua5.1

 

未安装XCB:VLC 1.1和更高版本需要XCB库来处理X11显示。不要禁用XCB,否则您将无法获得任何视频支持!

%sudo apt-get install libxcb-shm0-dev libxcb-xv0-devlibxcb-keysyms1-dev libxcb-randr0-dev libxcb-composite0-dev

 

编译ffmpeg:

编译 protobuf

 

ERROR#2:

Make时发生错误:

/usr/local/lib/libavutil.a(hwcontext_vaapi.o):In function `vaapi_device_free':

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1123:undefined reference to `XCloseDisplay'

/usr/local/lib/libavutil.a(hwcontext_vaapi.o):In function `vaapi_device_create':

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1192:undefined reference to `XOpenDisplay'

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1197:undefined reference to `vaGetDisplay'

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1204:undefined reference to `XDisplayName'

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1194:undefined reference to `XDisplayName'

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1221:undefined reference to `vaGetDisplayDRM'

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1192:undefined reference to `XOpenDisplay'

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1194:undefined reference to `XDisplayName'

/home/hcr/ffmpeg-3.4.2/libavutil/hwcontext_vaapi.c:1199:undefined reference to `XDisplayName'

 

程序中使用了Xlib,链接时出现此错误,是编译选项-lX11的位置的问题,这个选项只能出现在最后,把Makefile中的错误都改过来。注意的是每次./configure过后都需要纠正这个错误。同时make命令加上LDFLAGS=-lX11

 

错误命令:g++ -lX11 -o test test.o

正确命令:g++ test.o –lX11

 

ERROR#3

/usr/bin/ld:/usr/local/src/vlc/x264-snapshot-20100524-2245/libx264.a(cabac-a.o): relocationR_X86_64_PC32 against `x264_cabac_range_lps' can not be used when making ashared object; recompile with -fPIC

/usr/bin/ld:final link failed: Bad value

collect2:ld returned 1 exit status

 

在对应的CFLAGS里面加上“-fPIC”选项:CFLAGS="-fPIC"./configure

 

解决了这几个问题基本上就编译通过了,但是没有图形界面,尽可以通过add命令播放视频,这时候才想到自己都没有装Qt,而且./configure的时候也没有提出对Qt的依赖。我才意识到是./configure的选项的问题,不能完全不使用编译选项。官方推荐了一个选项。

 

这是一个典型的VLC配置线的例子:

%./configure --enable-x11 --enable-xvideo --enable-sdl--enable-avcodec --enable-avformat  --enable-swscale --enable-mad--enable-libdvbpsi --enable-a52 --enable-libmpeg2 --enable-dvdnav --enable-faad--enable-vorbis --enable-ogg --enable-theora --enable-faac --enable-mkv--enable-freetype --enable-fribidi --enable-speex --enable-flac--enable-live555 --with-live555-tree = / usr / lib / live --enable-caca--enable-skins --enable-skins2 --enable-alsa --enable-qt4 --enable-ncurses


按照新的configure选项开始了第二遍编译,出现了以下的错误:

 

ERROR#4:

Notfound Qt5Svg

重新安装了Qt5.7.0,并且把编译选项--enable-qt4改为--enable-qt5

 

ERROR#5:

gui/qt/components/interface_widgets.cpp:61:22:fatal error: 5.5.1/QtGui/qpa/qplatformnativeinterface.h: No such file ordirectory compilationterminated.

有可能是wayland和Qt发生冲突,选用了—disable-wayland选项


ERROR#6:

checkingfor Qt ... no

 

在configure和make的时候都加上了选项,好像make时候的选项是不必要的

./configure--with-qt-dir=/opt/Qt5.7.0/5.7/gcc_64     --with-qt-includes=/opt/Qt5.7.0/5.7/gcc_64/include--with-qt-libraries=/opt/Qt5.7.0/5.7/gcc_64/lib


CFLAGS="-fPIC"./configure --enable-x11 --enable-xvideo --enable-sdl --enable-avcodec--enable-avformat  --enable-swscale--enable-mad --enable-libdvbpsi --enable-a52 --enable-libmpeg2 --enable-dvdnav  --enable-faad --enable-vorbis --enable-ogg--enable-theora --enable-faac --enable-mkv --enable-freetype  --enable-fribidi --enable-speex --enable-flac--enable-live555 --with-live555-tree=/usr/lib/live  --enable-caca --enable-skins --enable-skins2--enable-alsa --enable-qt5 --enable-ncurses --disable-wayland--with-qt-dir=/opt/Qt5.7.0/5.7/gcc_64--with-qt-includes=/opt/Qt5.7.0/5.7/gcc_64/include--with-qt-libraries=/opt/Qt5.7.0/5.7/gcc_64/lib

 

ERROR#7:

这次make完成后就可以看到图形界面了,但是播放了一个MP4格式的视频,提示不支持h64解码,当时编译成命令行版本的时候都是不存在这个问题的。

命令行:[00007f47ecc14210] main decoder error: cannot load plug-in/home/hcr/workspace

/vlc/modules/.libs/libavcodec_plugin.so:/home/hcr/workspace/vlc/modules/.libs/libavcodec_plugin.so:

 undefined symbol: vaGetDisplayDRM

[00007f47ecc14210]main decoder error: Codec `h264' (H264 - MPEG-4 AVC (part 10)) is notsupported.

图形界面:Codec not supported:

VLCcould not decode the format "h264" (H264 - MPEG-4 AVC (part 10))

 

我感觉可能是VLC的libavcodec_plugin.so模块没有编译好,可能是因为ffmpeg编译的时候没有设置好参数,这次在ffmpeg编译的时候: ./configure --enable-gpl --enable-version3 --enable-nonfree--enable-pic --enable-shared --enable-static --enable-libx264 --enable-libx265 我记得上一次好像是没加参数的,这次特别注意了—enable-libx264

 

这次编译完基本就OK了。

你可能感兴趣的:(VLC编译记录 Ubuntu16.04)