根据VLC官网中的说法,一般在Windows下编译有两种方法,一种是用Cygwin编译,但据说这已经Outdated了,另一种则是官方推荐的编译方法:MSYS+MINGW。
一开始用Cygwin来编译,但频频出错,大部分时间都用在排除错误上了,最后也没有编译成功。后来在老师的指点下选择用MSYS+MINGW来编译,花了半天时间就完成了。在这里总结一下用MSYS+MINGW来编译VLC相关的编译步骤(以下下编译步骤来自VLC官网http://wiki.videolan.org/Win32CompileMSYSNew,但我做了翻译和整理,而且把编译过程中可能出现的问题以及解决办法做了简单的小结)。
一、什么是MSYS?
MSYS: Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。(是否厌倦了Cygwin蜗牛般的shell环境,试试MSYS中的rxvt吧)
MinGW:即Minimalist GNU for Windows。它是一些头文件和函数库的集合,该集合允许人们在没有第三方动态链接库的情况下使用GCC(GNU Compiler C)产生Win32程序。
MinGW主要由GNU binary utilities、GCC和GDB组成。同时还包括一些必要的库,例如libc(C Runtime),及专门用于Win32环境的API接口库。如果你想学习linux环境下的编程,而又不想装linux,那你就装一个MinGW吧。
(以上资料来自百度百科)
二、 配置编译环境
这是编译VLC最麻烦也最为关键地方。
1. 准备工作
Ø 电脑上必需有文本编辑器,用记事本或者写字板都行(用于打开和修改脚本文件)
Ø 安装解压工具7-zip(许多官网下载的压缩包格式都是基于LINUX的,扩展名为.tar.gz, .tar.bz2, .tar.lzma等,常用的解压软件WinRAR无法解压)。
Ø 确保WINDOWS用户名不包含空格(VLC不会建立在一个文件名中包含空格的文件夹内)
2. 安装MinGW
2.1 TDM / MinGW的安装
可以点击以下链接下载并安装:http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.5.2.exe/download
安装向导:
Ø 取消选择"Check for updatedfiles..."
Ø 选择“Create”
Ø 安装到C:\MinGW
Ø 保持默认设置
Ø 事后检查 C:\MinGW\bin是否被添加到Windows的环境变量中,如果没有,请自己添加。方法如链接:(http://www.computerhope.com/issues/ch000549.htm)
2.2 MinGW-utils的安装
下载并安装MinGW - utils:http://prdownloads.sourceforge.net/mingw/mingw-utils-0.3.tar.gz
提取内容到C:\ MinGW
3. MSys
3.1 MSYS的安装
Ø 可以点击以下链接下载并安装:http://sourceforge.net/project/downloading.php?group_id=2435&filename=MSYS-1.0.11.exe
Ø 通过安装向导,并默认安装到 C:\Msys\1.0
Ø 在自动弹出的命令窗口中,回答如下问题:
Accept Post Install: [y]
MinGW Installed? : [y]
path to MinGW: [c:/MinGW]
3.2 MSys Developer Toolkit(Msys开发工具包)的安装
Ø 可以点击以下链接下载并安装,按照安装向导选择默认安装即可
http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe
3.3 AutoToolsand libcrypt(用于更新MSYS安装目录中的文件)
按以下链接下载autoconf, automake, libtool 和libcrypt文件的压缩包,并解压到C:\Msys\1.0中:
Ø http://prdownloads.sourceforge.net/mingw/libcrypt-1.1_1-2-msys-1.0.11-dll-0.tar.lzma
这里需要特别注意的是解压后的压缩包一般都有bin和share两个文件夹,把文件夹里面的文件拷到C:\Msys\1.0相应的文件夹即可,不要把整个文件夹替代C:\Msys\1.0中的文件夹。如autoconf-2.63-1-msys-1.0.11-bin.tar解压后有bin文件夹,只需要把bin文件夹里文件复制到C:\msys\1.0\bin里即可。
3.4 Glib and PKG-CONFIG
跟上面类似,下载以下文件包,解压到C:\Msys\1.0相应文件夹里。
Ø http://ftp.gnome.org/pub/GNOME/binaries/win32/glib
Ø ftp://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip
Ø ftp://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config-dev_0.23-3_win32.zip
Ø http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime_0.18.1.1-2_win32.zip
要注意的是第一个链接下载时需选择最新版本,现在最新版是glib 2.28,点击进入2.28文件夹后可以看到两个链接:
glib-dev_2.28.1-1_win32.zip 19-Feb-2011 13:08 2.7M
glib_2.28.1-1_win32.zip 19-Feb-2011 13:10 2.4M
选择第二个非DEV版即可
3.5 Add pkg config path variable(添加PKG配置路径变量)
打开C:\msys\1.0下的msys.bat命令行窗口,输入
set PKG_CONFIG_PATH=/win32/lib/pkgconfig
回车即可
3.6 更改 libtool 的搜索路径
打开C:\MSys\1.0\bin\中的libtool文件,添加目录 /mingw/lib到9992行“compiler_lib_search_dirs=”的末尾(可以用搜索的办法查找到该行),最后该行的完整内容应该是这样的:
compiler_lib_search_dirs="/usr/lib /usr/lib /bin/../lib/gcc-lib/i686-pc-msys/2.95.3-1 /bin/../lib/gcc-lib /usr/lib/gcc-lib/i686-pc-msys/2.95.3-1 /bin/../lib/gcc-lib/i686-pc-msys/2.95.3-1/../../../../i686-pc-msys/lib /usr/lib/gcc-lib/i686-pc-msys/2.95.3-1/../../../../i686-pc-msys/lib /mingw/lib"
4. 安装LUA tools
4.1 LUA工具包
VLC使用Lua编写的脚本语言,但官方下载的lua工具包中并没有相应的二进制文件,所以需要重新编译它。
可以从以下地址下载LUA工具包:http://www.lua.org/ftp/lua-5.1.4.tar.gz
解压到以下文件夹:C:\MSys\1.0\home\<username>其中,username为你当前的Windows的用户名。
运行C:\MSys\1.0\msys.bat
键入以下命令:
cd /home/<username>/lua-5.1.4
make mingw
命令运行结束后你可以在src目录中看到以下文件:lua.exe, luac.exe,lua51.dll
用命令的方式将这些文件加入到 /bin目录下:
cd src
cp *.exe /bin
cp *.dll /bin
cd ..
4.2 Precompiled contribs
可以按以下链接下载contribs:http://people.videolan.org/~jb/Contribs/contrib-20100608-win32-bin-gcc-4.4.4-runtime-3.17-only.tar.bz2
或者下载最新的contirb:http://people.videolan.org/~jb/Contribs/
下载后解压,解压后会有一个名为usr的文件夹,然后把里面的子文件夹win32复制到C:\MSys\1.0目录下。最后,win32中的文件libdvdnav.a的绝对路径应该是这样的:
C:\MSys\1.0\win32\lib\libdvdnav.a
5.VLC sources(VLC源文件)
5.1 VLC 版本: 1.1.0rc3
Ø 下载:http://download.videolan.org/pub/videolan/testing/vlc-1.1.0-rc3/vlc-1.1.0-rc3.tar.bz2
Ø 解压到C:\MSys\1.0\home\<username>
Ø 把vlc-1.1.0-rc3文件夹重命名为vlc
5.2添加配置文件 configure-msys (1.1.x only)
下载 地址:http://git.videolan.org/?p=vlc.git;a=blob_plain;f=extras/package/win32/configure-msys.sh;hb=HEAD
保存到C:\msys\1.0\home\<username>\vlc\extras\package\win32\configure-msys.sh
注意:下载的文件名为extras_package_win32_configure-msys.sh,保存的时候需要改为configure-msys.sh
5.3添加配置文件 configure-common (1.1.x only)
Download: http://git.videolan.org/?p=vlc.git;a=blob_plain;f=extras/package/win32/configure-common.sh;hb=HEAD
保存到:C:\msys\1.0\home\<username>\vlc\extras\package\win32\configure-common.sh
同上,保存的时候需要将此文件(extras_package_win32_configure-common.sh)命名为configure-common.sh
6. 最后的更改 : whoami and hostname
解压后把bin文件夹里面的三个可执行文件who.exe, whoami.exe 和 hostname.exe复制到C:/MSys/1.0/bin里面
三、编译
Ø Bootstrap
打开C:\MSys\1.0\msys.bat,运行命令行:
cd vlc
cp -v /usr/win32/share/aclocal/* m4/
cp -v /usr/share/aclocal/* m4/
PATH=/usr/win32/bin:$PATH ./bootstrap
运行成功后会显示:Successfullybootstrapped
Ø Configure
sh extras/package/win32/configure-msys.sh
成功运行结束后会显示如下结果:
libvlc configuration
--------------------
version : 1.1.0-rc3
system : mingw32
architecture : i586 mmx sse sse2
build flavour : debug
vlc aliases : cvlc rvlc svlc qvlc
plugins/bindings : activex
You can tune the compiler flags in vlc-config.
Tobuild vlc and its plugins, type `./compile' or `make'.
Ø Make (compile)
运行命令:
PATH=/usr/win32/bin:$PATH make
如果这一步出错可以采取以下步骤:
l 返回到步骤4.2,下载最新版本的contrib
l 在脚本文件configure-msys.sh中添加--disable-upnp
如果没有问题的话编译就正式开始了,这一步花的时间比较长,大概要一两个小时。
Ø Create self-contained packages
编译成功后,生成的一些文件跟源代码一起杂乱的放在C:\msys\1.0\home\zou\vlc下, 在其中可以找到vlc.exe,但双击运行时却出现了错误:
这是因为在该目录下找不到相应的库文件的缘故。
下一步是把编译生成的相关文件打包放在一个文件夹内,用make命令即可实现此功能:
make package-win32-base
命令执行完之后可以在C:\msys\1.0\home\zou\vlc下发现多出了两个文件夹:symbols-1.1.0-rc3和vlc-1.1.0-rc3。其中vlc-1.1.0-rc3就是从网上下载的VLC客户端软件包解压后的文件夹。双击里面的vlc.exe即可正常运行。
若运行命令:
make package-win32-zip
则会生成相应的压缩文件。