流媒体02:Linux交叉编译VLC-2.2.1

简介:

上一篇使用了Cygwin编译了VLC-2.2.1,编译过程正如官网所述,异常的慢。本篇介绍官网推荐的方法,使用Linux交叉编译VLC-2.2.1。

环境搭建

参考:Win32Compile
源码:vlc-2.2.1.tar.xz
库: vlc-contrib-i686-w64-mingw32-20150630.tar.bz2
Linux:Ubuntu Desktop 15.04
本打算使用LinuxMint17.2,但这个发行版是基于Ubuntu14.04,安装mingw-tools的版本为3.1.0,会致使x265、taglib、gnutls等module编译不过,Ubuntu15.04默认安装的mingw-tools版本为3.2.0,编译时不会出问题。

安装库

本章内容需保证Ubuntu能正常联网

1
2
3
4
5
$ sudo apt-get install -y gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-tools
$ sudo apt-get install -y lua5.2 libtool automake autoconf autopoint make gettext
$ sudo apt-get install -y qt4-dev-tools qt5-default
$ sudo apt-get install -y git subversion cmake cvs wine-dev yasm
$ sudo apt-get install -y zip p7zip nsis bzip2

安装过程中可能会出现Configuring ttf-mscorefonts-installer的配置页面,按tab后,一路回车即可。

执行脚本

保存如下内容到脚本01.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/sh

# This script enforces statically linking of libgcc, libstdc++-6, and libpthread,
# without needing to rebuild gcc and mingw-w64 from scratch.
# -static-libgcc -static-libstdc++ flags can not be used in a libtool build system,
# as libtool removes flags that it doesn't understand.

move() {
[ -f $1 ] || return 1
mkdir -p old/
mv -v $* old/
return 0
}

for x in i686 x86_64
do
library_path_list=`$x-w64-mingw32-gcc -v /dev/null 2>&1 | grep ^LIBRARY_PATH|cut -d= -f2|sort|uniq`
IFS=':'
for i in $library_path_list
do
cd $i
move libstdc++-6.dll libstdc++.dll.a libgcc_s.a libgcc_s_sjlj-1.dll && ln -s libgcc_eh.a libgcc_s.a
move libpthread.dll.a libwinpthread.dll.a
move libwinpthread-1.dll
[ -d ../bin ] && cd ../bin && move libwinpthread-1.dll
done
done


exit 0

执行命令,将部分dll库移走备份。

1
$ sh 01.sh

解压源码

执行如下命令。

1
2
$ tar xJvf vlc-2.2.1.tar.xz
$ cd vlc-2.2.1/

准备库

执行如下命令。

1
2
$ cd contrib/
$ mkdir win32; cd win32

1
$ mv ~/vlc-contrib-i686-w64-mingw32-20150630.tar.bz2 vlc-contrib-i686-w64-mingw32-latest.tar.bz2

编译库。

1
2
$ ../bootstrap --build=i686-w64-mingw32
$ make prebuilt

返回VLC源码根目录。

1
$ cd ../../

编译源码

首先bootstrap。

1
$ ./bootstrap

手动指定pkg_config路径。

1
$ export PKG_CONFIG_LIBDIR=$HOME/vlc-2.2.1/contrib/i686-w64-mingw32/lib/pkgconfig

再执行如下命令。

1
2
$ mkdir win32; cd win32
$ ../extras/package/win32/configure.sh --host=i686-w64-mingw32

根据CPU内核个数,执行make命令。

1
make -j4 # 4核CPU

编译速度很快,一会儿就完成了。

打包

执行如下命令。

1
$ make package-win-common

执行完成后,当前目录下会生成vlc-2.2.1目录,即为绿色版VLC。

执行测试

Ubuntu下测试。

1
2
$ cd vlc-2.2.1
$ wine vlc.exe

程序界面可正常启动,打开一个视频,音频正常,显示不正常。

将程序放置到Windows平台测试则正常。

~~ EOF ~~

目录
相关文章
|
6月前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
224 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
6月前
|
存储 算法 编译器
【Linux 应用开发 】交叉编译的浮点数处理问题:从表象到底层原理的探索与解决
【Linux 应用开发 】交叉编译的浮点数处理问题:从表象到底层原理的探索与解决
108 1
|
6月前
|
数据建模 Linux C++
linux交叉编译live555
linux交叉编译live555
130 1
|
6月前
|
Linux
linux 交叉编译libpng,libjpeg库
linux 交叉编译libpng,libjpeg库
96 1
|
6月前
|
Linux C++
linux交叉编译icu
linux交叉编译icu
194 1
|
6月前
|
Linux 编译器 Android开发
linux交叉编译nss3,nspr库精讲
linux交叉编译nss3,nspr库精讲
262 1
|
6月前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
332 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
5月前
|
Linux
Linux交叉编译+粤嵌LCD实现三色图
Linux交叉编译+粤嵌LCD实现三色图
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
6月前
|
存储 Linux 编译器
Linux 交叉编译第三方库需要设置的环境变量
Linux 交叉编译第三方库需要设置的环境变量
215 0