在Ubuntu下编译VLC源代码生成的VLC无法播放Youtube视频(比如https://www.youtube.com/watch?v=mDp-ABzpRX8)

错误提示如下:

zlf@ubuntu:~/vlc-2.1.$ ./vlc
VLC media player 2.1. Rincewind (revision 2.1.--gdab6cb5)
[0x9872a98] main libvlc: 正在以默认界面运行 vlc,使用 'cvlc' 将 vlc 运行在无界面的状态下。
[0x9931448] main tls client error: TLS client plugin not available
[0xb5d034d8] main input error: open of `https://www.youtube.com/watch?v=mDp-ABzpRX8' failed

原因是缺少TLS客户端插件,因此需要将GnuTLS库编译进来。

这里下载GnuTLS库的最新版本3.3.12,configure时报错,显示缺少依赖库Libnettle,而且只能适配2.7.1,nettle3.0还不行。

zlf@ubuntu:~/gnutls-3.3.$ ./configure --prefix=/usr
configure: error:
***
*** Libnettle 2.7. was not found. Note that this version of gnutls doesn't support nettle 3.0.

又去下载NETTLE库,编译安装,再运行GnuTLS的configure,NETTLE倒是检查通过,但依然报错,还需要HOGWEED库和GMP。

zlf@ubuntu:~/gnutls-3.3.$ ./configure --prefix=/usr
..................
checking for NETTLE... yes
checking for HOGWEED... no
configure: error:
***
*** Libhogweed (nettle's companion library) was not found. Note that you must compile nettle with gmp support.
下载GMP库,编译安装:How to Install GMP in Ubuntu
下载HOGWEED库,编译安装。
然后,需要重新配置安装NETTLE,可以参考这篇文章(遇到了一模一样的问题)。
再再次重新配置编译GnuTLS,

configure正常通过,但make时又报错了,典型的undefined reference to的error问题。
 
 
../lib/.libs/libgnutls.so: undefined reference to `nettle_umac96_set_key'
../lib/.libs/libgnutls.so: undefined reference to `nettle_salsa20_crypt'
../lib/.libs/libgnutls.so: undefined reference to `nettle_umac128_update'
../lib/.libs/libgnutls.so: undefined reference to `nettle_umac96_set_nonce'
../lib/.libs/libgnutls.so: undefined reference to `nettle_salsa20_set_key'
../lib/.libs/libgnutls.so: undefined reference to `nettle_umac128_set_nonce'
../lib/.libs/libgnutls.so: undefined reference to `nettle_umac128_set_key'
../lib/.libs/libgnutls.so: undefined reference to `nettle_umac96_digest'
../lib/.libs/libgnutls.so: undefined reference to `nettle_salsa20_set_iv'
../lib/.libs/libgnutls.so: undefined reference to `nettle_umac128_digest'
../lib/.libs/libgnutls.so: undefined reference to `nettle_salsa20r12_crypt'
../lib/.libs/libgnutls.so: undefined reference to `nettle_umac96_update'
collect2: ld returned exit status
make[]: *** [psktool] Error
make[]: Leaving directory `/home/zlf/gnutls-3.3./src'
make[]: *** [all-recursive] Error
make[]: Leaving directory `/home/zlf/gnutls-3.3./src'
make[]: *** [all] Error
make[]: Leaving directory `/home/zlf/gnutls-3.3./src'
make[]: *** [all-recursive] Error
make[]: Leaving directory `/home/zlf/gnutls-3.3.'
make: *** [all] 错误

尝试了一些方法没搞定,只好求助Linuxfromscratch网站了,跟着上面的安装指导操作。

configure时需要指定根证书,但本机上没有/etc/ssl/ca-bundle.crt,因此需要去http://certifie.com/ca-bundle/下载一个现成的或自己制作一个。

./configure --prefix=/usr --with-default-trust-store-file=/etc/ssl/ca-bundle.crt

configure成功后make又报错了。

/home/zlf/gnutls-3.3./build-aux/missing: line : makeinfo: command not found
WARNING: 'makeinfo' is missing on your system.
You should only need it if you modified a '.texi' file, or
any other file indirectly affecting the aspect of the manual.
You might want to install the Texinfo package:
<http://www.gnu.org/software/texinfo/>
The spurious makeinfo call might also be the consequence of
using a buggy 'make' (AIX, DU, IRIX), in which case you might
want to install GNU make:
<http://www.gnu.org/software/make/>
make[]: *** [gnutls.info] Error
make[]: Leaving directory `/home/zlf/gnutls-3.3./doc'
make[]: *** [all-recursive] Error
make[]: Leaving directory `/home/zlf/gnutls-3.3./doc'
make[]: *** [all] Error
make[]: Leaving directory `/home/zlf/gnutls-3.3./doc'
make[]: *** [all-recursive] Error
make[]: Leaving directory `/home/zlf/gnutls-3.3.'
make: *** [all] 错误

原因是没有makeinfo命令,安装texinfo。

zlf@ubuntu:~$ makeinfo
程序“makeinfo”尚未安装。 您可以使用以下命令安装:
sudo apt-get install texinfo
zlf@ubuntu:~$ sudo apt-get install texinfo

终于make GnuTLS成功了。

make check也PASS了。

最后是sudo make install,OK!

终于安装好了GnuTLS库,可以继续编译VLC了,VLC的configure中默认是使能GnuTLS的,因此configure后直接make。

这次用的是专业安装指导

但安装后的VLC并没有GnuTLS的插件(VLC-工具-插件及扩展-插件)!还是没有将其编译进去?

检查GnuTLS的configure,发现configure找到的GnuTLS版本是2.12.14,并非自己安装的最新的3.3.12。

zlf@ubuntu:~/gnutls-3.3.$./configure --enable-gnutls
......
checking for GNUTLS... no
configure: error: Requested 'gnutls >= 3.0.20' but version of GnuTLS is 2.12.
You may find new versions of GnuTLS at http://www.gnu.org/software/gnutls/.)

确认了一下自己下载的GnuTLS的版本,确实是3.3.12。

zlf@ubuntu:~/gnutls-3.3.$ ./configure --version
GnuTLS configure 3.3.
generated by GNU Autoconf 2.69 zlf@ubuntu:~$ pkg-config --modversion gnutls
3.3.

又确认了一下安装到/usr/lib下的GnuTLS的版本,也是3.3.12。

zlf@ubuntu:/usr/lib/pkgconfig$ vim gnutls.pc
显示gnutls的Version: 3.3.

最后在Ubuntu软件中心里发现了旧版的GnuTLS 2.12.14,将其卸载。

继续configure,继续报错,这次是缺少新版本的libgcrypt。

checking whether GCRYCTL_SET_THREAD_CBS is declared... no
configure: error: libgcrypt version 1.1. or higher not found. Install libgcrypt or use --disable-libgcrypt. Have a nice day.

GNUPG官网下载libgcrypt的TAR包,解压配置编译安装。

继续configure,继续报错,这次是缺少新版本的libgpg-error。同上搞定。

configure终于通过!

开始make,报错。

make[]: 正在进入目录 `/home/zlf/vlc-2.1./modules/misc'
CC libxml_plugin_la-libxml.lo
CCLD libxml_plugin.la
CC libexport_plugin_la-html.lo
CC libexport_plugin_la-m3u.lo
CC libexport_plugin_la-xspf.lo
CC libexport_plugin_la-export.lo
CCLD libexport_plugin.la
CC libgnutls_plugin_la-gnutls.lo
gnutls.c::: 致命错误: gnutls/gnutls.h:没有那个文件或目录
编译中断。
make[]: *** [libgnutls_plugin_la-gnutls.lo] 错误
make[]:正在离开目录 `/home/zlf/vlc-2.1./modules/misc'
make[]: *** [all] 错误
make[]:正在离开目录 `/home/zlf/vlc-2.1./modules/misc'
make[]: *** [all-recursive] 错误
make[]:正在离开目录 `/home/zlf/vlc-2.1./modules'
make[]: *** [all-recursive] 错误
make[]:正在离开目录 `/home/zlf/vlc-2.1.'
make: *** [all] 错误

打开gnutls.c看了下,发现需要gnutls/gnutls.h和gnutls/x509.h两个头文件,将它们拷贝至/usr/include下。

zlf@ubuntu:~/gnutls-3.3./lib/includes/gnutls/$ sudo cp gnutls.h x509.h /usr/include/gnutls

继续make,继续报错,这次又缺少头文件combat.h,继续拷贝。

zlf@ubuntu:~/gnutls-3.3./lib/includes/gnutls/$ sudo cp compat.h /usr/include/gnutls

继续make,成功!

make check,PASS!

打开VLC,检查插件设置,终于有TLS了。

总结:

1、Ubuntu可以使用apt-get命令直接下载安装软件包,也可以下载压缩包然后解压配置编译安装,后者可以自由决定软件包版本;
2、每个软件下几乎都有README文档和INSTALL文档,遇到问题先去看下,没坏处;
3、每个软件或命令都有--help选项,遇到问题先去看下,没坏处;
4、折腾过程中根据错误提示,看帮助看代码,网上搜索,一步一步解决。

VLC编译问题的更多相关文章

  1. vlc 编译

    一.有用的网址: https://forum.videolan.org/search.php 二.只编译Java apk部分: source env.shmake distcleanmake -e 编 ...

  2. IOS VLC编译步骤(包含移植和截图功能)

    http://blog.csdn.net/Kan_Crystal/article/details/40424673 一.下载源码 先到VLC官网将源码下载到本机,以下链接为官网编译操作地址:https ...

  3. VLC编译

    http://blog.csdn.net/hdh4638/article/details/7602321 1 下载代码 ki.videolan.org/VLC_Source_code git colo ...

  4. VLC 重新编译第三方库的预编译包contrib

    VLC的引用了很多开源的第三方库,均放到VLC目录下的contrib中(本来开始编译是2.1.x以上版本,以前或以后可能会变化),在Windows版本编译中,contrib文件夹中仅仅下载VLC官网上 ...

  5. 基于vlc sdk的二次开发--环境搭建、编译

    前言 关于 搭建.编译VLC,不同的平台有不同的方法,可以参考wiki. 其中在windows下编译VLC有两种方式,MSYS+MinGW和CygWin.通过测试,最后决定采用MSYS+MinGW搭建 ...

  6. VLC说明

    一.简介 vlc的全名是Video Lan Client,是一个开源的.跨平台的视频播放器.VLC支持大量的音视频传输.封装和编码格式,完整的功能特性列表可以在这里获得http://www.video ...

  7. vlc

    源码下载地址:http://download.videolan.org/pub/videolan/vlc/ 编译依赖: sudo apt-get install liblua5.2-dev sudo ...

  8. VLC框架分析

      功能部份:VLC媒体播放器的核心是libvlc ,它提供了界面,应用处理功能,如播放列表管理,音频和视频解码和输出,线程系统.所有libvlc源文件设在的/src目录及其子目录:# config/ ...

  9. vlc的应用之二:vlc的ActiveX及cab

    请移步https://higoge.github.io/,所有下载资料在那个博客都能找到.谢谢. http://jeremiah.blog.51cto.com/ 2009-05-14补充:8. Act ...

随机推荐

  1. Javascript之严格模式详解

    一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...

  2. HTML与XHTML的区别

    为什么要使用XHTML? 我们认为万维网上的许多页面都包含着糟糕的 HTML 代码. 下面的 HTML 代码仍然可以工作得很好,即使它没有遵守 HTML 规则: <html> <he ...

  3. iOS播放动态GIF图片

    <转> 图片分为静态和动态两种,图片的格式有很多种,在开发中比较常见的是.png和.jpg的静态图片,但有的时候在App中需要播放动态图片,比如.gif格式的小表情头像,在IOS中并没有提 ...

  4. IOS懒人笔记应用源码

    这个源码是懒人笔记应用源码,也是一个已经上线的apple应用商店的应用,懒人笔记iOS客户端源码,支持语音识别,即将语音转化成文本文字,所用语音识别类库为讯飞语音类库. 懒人笔记是一款为懒人设计的笔记 ...

  5. java生成4个不同的随机数

    package lianxi; import java.util.Random; public class suijishu { public static void main(String[] ar ...

  6. javascript 数组对象与嵌套循环写法

    'use strict' var info=[{"name":"最近想跳河","interst":["历史"," ...

  7. jQuery bind and unbind (绑定和解除)

    测试:页面代码: <body> <input type="button" name="aaa" value="点击我"&g ...

  8. Run JavaScript on your PeopleSoft pages conditionally

    Here, PeopleCode sets the logic that determines when the JavaScript code will run. This is not as si ...

  9. Cassandra 有限分页策略

    瀑布式分页 如果你的应用只需要瀑布式的分页,那么,Cassandra可以很好的支持,不过记得要指定好排序顺序. CLUSTERING ORDER BY (add_time DESC); 常见的分页,跳 ...

  10. CodeBlocks背景主题的设置

    来自:http://blog.csdn.net/gzshun/article/details/8294305 找了好几个CodeBlocks的背景色,都不太如人意.感觉下面这个还不错,所以转来给大家分 ...