VLC编译问题
在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.
../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编译问题的更多相关文章
- vlc 编译
一.有用的网址: https://forum.videolan.org/search.php 二.只编译Java apk部分: source env.shmake distcleanmake -e 编 ...
- IOS VLC编译步骤(包含移植和截图功能)
http://blog.csdn.net/Kan_Crystal/article/details/40424673 一.下载源码 先到VLC官网将源码下载到本机,以下链接为官网编译操作地址:https ...
- VLC编译
http://blog.csdn.net/hdh4638/article/details/7602321 1 下载代码 ki.videolan.org/VLC_Source_code git colo ...
- VLC 重新编译第三方库的预编译包contrib
VLC的引用了很多开源的第三方库,均放到VLC目录下的contrib中(本来开始编译是2.1.x以上版本,以前或以后可能会变化),在Windows版本编译中,contrib文件夹中仅仅下载VLC官网上 ...
- 基于vlc sdk的二次开发--环境搭建、编译
前言 关于 搭建.编译VLC,不同的平台有不同的方法,可以参考wiki. 其中在windows下编译VLC有两种方式,MSYS+MinGW和CygWin.通过测试,最后决定采用MSYS+MinGW搭建 ...
- VLC说明
一.简介 vlc的全名是Video Lan Client,是一个开源的.跨平台的视频播放器.VLC支持大量的音视频传输.封装和编码格式,完整的功能特性列表可以在这里获得http://www.video ...
- vlc
源码下载地址:http://download.videolan.org/pub/videolan/vlc/ 编译依赖: sudo apt-get install liblua5.2-dev sudo ...
- VLC框架分析
功能部份:VLC媒体播放器的核心是libvlc ,它提供了界面,应用处理功能,如播放列表管理,音频和视频解码和输出,线程系统.所有libvlc源文件设在的/src目录及其子目录:# config/ ...
- vlc的应用之二:vlc的ActiveX及cab
请移步https://higoge.github.io/,所有下载资料在那个博客都能找到.谢谢. http://jeremiah.blog.51cto.com/ 2009-05-14补充:8. Act ...
随机推荐
- Spring MVC防御CSRF、XSS和SQL注入攻击
参考: http://www.myhack58.com/Article/html/3/7/2012/36142_6.htm http://blog.csdn.net/jasontome/article ...
- 用IKVMC将jar转成dll供c#调用
用IKVMC将jar转成dll供c#调用 ikvmc c# dll jar 用IKVMC将jar转成dll供c#调用 前言 ikvmc介绍 ikvmc下载安装 下载并解压 设置环境变量 jar-> ...
- Windows Phone 开发起步之旅之二 C#中的值类型和引用类型
今天和大家分享下本人也说不清楚的一个C#基础知识,我说不清楚,所以我才想把它总结一下,以帮助我自己理解这个知识上的盲点,顺便也和同我一样不是很清楚的人一起学习下. 一说起来C#中的数据类型有哪些,大 ...
- mvc路由设置参数配置类似于url重写
1.新建的mvc项目中Global.asax 2.在另外一个控制器中的视图中 3. 4.
- 01-实现图片按钮的缩放、动画效果(block的初步应用)
#import "ViewController.h" #define kDelta 60 @interface ViewController () @end @implementa ...
- SQL SERVER连接字符串学习
在使用connection string时遇到一些问题 字符串如下"Data Source= ******;Initial Catalog=******;Persist Security I ...
- C# 中解决页面刷新后字体等变大问题
来源:http://blog.csdn.net/wcsjsdn/article/details/5109605 我们在.net开发中时常会遇到一个问题,那就是,当点击某个按钮后,调用js语句,当点击& ...
- HTML5高防win8风格
使用HTML5做了一个高防Win8的页面,大家看看怎么样 Java..NET.PHP.Android.iOS.HTML5,CSS3. web前端.视频资料下载网站 http://51pansou.c ...
- KMP串匹配算法解析与优化
朴素串匹配算法说明 串匹配算法最常用的情形是从一篇文档中查找指定文本.需要查找的文本叫做模式串,需要从中查找模式串的串暂且叫做查找串吧. 为了更好理解KMP算法,我们先这样看待一下朴素匹配算法吧.朴素 ...
- 【转】利用DCC32实现命令行批量编译
*.dof [Compiler] A=1 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=1 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 ...