耗时:8小时
01 编译环境
ThinkPad x240 i5 8G,主机windows10,使用vpn,可以访问google。有些更新需要vpn。
VMware Workstation 12,UbuntuX64_1604_Desktop, 自带gcc5.3.1。
安装VMWare tools。
sudo apt-get update
sudo apt-get upgrade
upgrade后gcc升级到5.4.0版本。
ubuntu下载地址:http://releases.ubuntu.com/16.04/ubuntu-16.04-desktop-amd64.iso
快照,虚拟机9.25GB
02 安装编译需要的软件
按照https://wiki.videolan.org/Win32Compile说明,UbuntuX64系统。操作步骤:
sudo apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-tools # 对应win32版本
sudo apt-get install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 mingw-w64-tools # 对应win64版本
sudo apt-get install lua5.1 lua5.2 liblua5.1-dev liblua5.2-dev
sudo apt-get install libtool automake autoconf autopoint make gettext
sudo apt-get install pkg-config
sudo apt-get install qt4-dev-tools qt5-default
sudo apt-get install git subversion
sudo apt-get install cmake cvs
sudo apt-get install zip p7zip p7zip-full nsis bzip2
sudo apt-get install yasm ragel
sudo apt-get install wine-dev
sudo apt-get install vim # 个人喜好,可不安装
# 安装jdk,有些插件需要运行ant,jdk下载地址。
# http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.tar.gz
tar -zxvf jdk-8u102-linux-x64.tar.gz
sudo mkdir /usr/lib/jvm
cp -R jdk1.8.0_102 /usr/lib/jvm/
# 在/etc/profile最后加入下面内容。
sudo vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_102
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
# 重启系统
sudo apt-get install ant
# 完成后,重启,14.7GB,做快照
# 到此,耗时4小时。
03 下载源代码
本次实验使用当前最新版本 vlc-2.2.4 版本。
下载地址:http://get.videolan.org/vlc/2.2.4/vlc-2.2.4.tar.xz
解压到 $HOME/vlc-2.2.4
。$HOME/vlc-2.2.4
即为代码主目录。
如需修改和对比代码,可参考:
// git源码地址:git://git.videolan.org/vlc.git
// vs2013调试版本:https://github.com/sunqueen/vlc-2.2.1.32-2013
04 编译vlc-2.2.4
04.01 编译win64版本
使用 x86_64-w64-mingw32,x86_64-w64-mingw32是64位linux下编译win64 vlc位版本必须使用的交叉编译库。
cd $HOME/vlc-2.2.4
mkdir -p contrib/x86_64 && cd contrib/x86_64
../bootstrap --host=x86_64-w64-mingw32
make prebuilt # 会下载 vlc-contrib-x86_64-w64-mingw32-latest.tar.bz2 并解压到 contrib/x86_64-w64-mingw32
# curl -f -L -- ftp://ftp.videolan.org/pub/videolan/contrib/x86_64-w64-mingw32/vlc-contrib-x86_64-w64-mingw32-latest.tar.bz2
#******************************************************
# 不建议自己编译contrib下面的组件,有个别的编译不过,下载各个组件包也需要较长时间(大约4小时左右,有些需要vpn)
# make fetch all # 重新下载源码压缩包到contrib/tarballs/下面
# make # make 生成contrib/win32/子目录下内容各个子文件夹
# 如果遇到一个关于jpegsrc.v9a.tar.gz的编译错误,可以做如下修改
# sudo vi ../../contrib/src/jpeg/rules.mak
# JPEG_URL := $(CONTRIB_VIDEOLAN)/jpegsrc.v$(JPEG_VERSION).tar.gz ==> $(CONTRIB_VIDEOLAN)/jpeg/jpegsrc.v$(JPEG_VERSION).tar.gz
# #http://downloads.videolan.org/pub/contrib/jpeg/jpegsrc.v9a.tar.gz
# 会有失败
#******************************************************
# 退到主目录
cd $HOME/vlc-2.2.4
mkdir x86_64 && cd x86_64
../bootstrap
export PKG_CONFIG_PATH=$HOME/vlc-2.2.4/contrib/x86_64-w64-mingw32/lib/pkgconfig
export PKG_CONFIG_LIBDIR=$HOME/vlc-2.2.4/contrib/x86_64-w64-mingw32/lib/pkgconfig
export PKG_CONFIG_PATH_CUSTOM=$PKG_CONFIG_LIBDIR
../configure --host=x86_64-w64-mingw32 # 这个过程,会有一个wine更新过程,自动完成的
make
make package-win-common # 生成 _win32 和 vlc-2.2.4 目录
wine ./vlc-2.2.4/vlc.exe # 可以启动vlc.exe
make package-win32-7zip # 生成 vlc-2.2.4-win64.7z 和 symbols-2.2.4。拷贝到windows系统,解压后运行。这一步会下载npapi-vlc源码到x86_64/npapi-vlc下并编译,会覆盖原有的x86_64/npapi-vlc文件。需要vpn。
make package-win32-debug-7zip # 生成 vlc-2.2.4-win64-debug.7z
04.02 编译win32版本
使用 i686-w64-mingw32,i686-w64-mingw32是64位linux下编译win32 vlc位版本必须使用的交叉编译库。
cd $HOME/vlc-2.2.4
mkdir -p contrib/win32 && cd contrib/win32
../bootstrap --host=i686-w64-mingw32
make prebuilt # 会下载vlc-contrib-i686-w64-mingw32-latest.tar.bz2 并解压到 contrib/i686-w64-mingw32 目录下
# curl -f -L -- "ftp://ftp.videolan.org/pub/videolan/contrib/i686-w64-mingw32/vlc-contrib-i686-w64-mingw32-latest.tar.bz2"
# ******************************************************
# 不建议自己编译contrib下面的组件,有个别的编译不过,下载各个组件包也需要较长时间(大约4小时左右,有些需要vpn)
# make fetch all # 重新下载源码压缩包到contrib/tarballs/下面
# make # make 生成contrib/win32/子目录下内容各个子文件夹
# 最后 Makefile:1243: recipe for target 'versioninfo.lo' failed 错误。
# ******************************************************
# 退到主目录
cd $HOME/vlc-2.2.4
mkdir win32 && cd win32
../bootstrap
export PKG_CONFIG_PATH=$HOME/vlc-2.2.4/contrib/i686-w64-mingw32/lib/pkgconfig
export PKG_CONFIG_LIBDIR=$HOME/vlc-2.2.4/contrib/i686-w64-mingw32/lib/pkgconfig
export PKG_CONFIG_PATH_CUSTOM=$PKG_CONFIG_LIBDIR
../configure --host=i686-w64-mingw32
make
make package-win-common # 生成 _win32 和 vlc-2.2.4 目录
wine ./vlc-2.2.4/vlc.exe # 可以启动vlc.exe
make package-win32-7zip # 生成 vlc-2.2.4-win32.7z 和 symbols-2.2.4。拷贝到windows系统,解压后运行。这一步会下载npapi-vlc源码到win32/npapi-vlc下并编译,会覆盖原有的win32/npapi-vlc文件。需要vpn。
make package-win32-debug-7zip # 生成vlc-2.2.4-win32-debug.7z