windows平台下VLC2.0.5编译说明

时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器。

暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学习研究使用。但是在对流媒体几乎没有了解的情况下,能有个学习的东西也好。

第一步肯定是要编译VLC了,目前最新的vlc版本是2.0.5,去官网下了2.0.5的源代码,准备开工。

百度了下,没有找到前辈们在windows下编译vlc 2.0.5的资料,没办法,只好自己照着官网的资料来搞了。官网的链接是http://wiki.videolan.org/Win32CompileMSYSNew

话说在官网上死活找不到win32编译的网页,后来还是在别人的博客上发现了这个链接的。这篇博文也是对vlc 官网上win32编译教程的翻译,不过是1.1.0版本的。链接:http://blog.csdn.net/wangyong0921/article/details/8103667

接下来进入正题了,主要内容是对官网教程的翻译,掺杂了解决问题过程中查找的资料,以及自己遇到的问题及解决方法,写这篇博文的目的一方面希望以后能够方便的回顾相关资料,另一方面也希望对遇到相同问题的朋友有点帮助。

由于本人英语及其差劲,翻译可能有很多词不达意或错误,敬请谅解,同时感谢上面那篇博文的博主,很多地方的翻译是参考了他的成果,非常感谢!

==================================================================================

以下是正文

==================================================================================

简介

注意事项:

1.本博文涉及到相关资料、链接都可能随着时间过去而失效,请以vlc官网为准。

2.下文经常需要下载文件并解压到某某目录,请将文件夹里的内容拷贝到相应的文件夹,不要直接覆盖整个文件。

3.请确保登陆的WINDOWS用户名不包含空格(VLC不会建立在一个文件名中包含空格的文件夹内)。

4.编译环境为:Windows XP SP3(32位系统)

相关概念

-----------------------

MinGW:

     MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环 境,它是Minimalist GNU on Windows的略称。这里的“纯粹”是指「使用msvcrt.dll的应用程序」。无法使用MFC (Microsoft Foundation Classes微软基础类库)。
     MinGW:即Minimalist GNU for Windows。它是一些头文件和函数库的集合,该集合允许人们在没有第三方动态链接库的情况下使用GCC(GNU Compiler C)产生Win32程序。
     MinGW主要由GNU binary utilities、GCC和GDB组成。同时还包括一些必要的库,例如libc(C Runtime),及专门用于Win32环境的API接口库。如果你想学习linux环境下的编程,而又不想装linux,那你就装一个MinGW吧。
 
MSys:
     MSys:是MinGW的辅助编译环境,通过它可以很方便的在windows下编译vlc,不过需要注意的是,你同样需要在linux下进行交叉编译,因为这样会更快也更简单。
 
准备工作
文本编辑器
--------------------------
官网推荐的是notepad/notepad++,不过我还是习惯使用ultraedit,这里就不放链接了,网上破解版很多。。
 
解压工具
--------------------------
解压工具推荐的是7-zip,非常流行的解压软件。
 
windows下的GNU环境
 
注意:在开始编译之前,请确认你的windows登陆用户名是没有空格的,否则请改换用户名再开始编译。
后文提到的<username>就是你的windows登陆用户名,不再复述。
 
MinGW
-----------------------------------
安装TDM/MinGW
URL: http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.7.1-2.exe/download
运行安装向导:
选择         Create
选择         32bit
安装目录  c:\MinGW 
(注意:我安装的时候默认是c:\MinGW32,请手动修改)
其它选项默认
 
MinGW Utils
URL: http://prdownloads.sourceforge.net/mingw/mingw-utils-0.3.tar.gz
解压到 c:\MinGW
 
MSys
----------------------------
 
安装MSys
URL: 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]
 
MSys Developer Toolkit
URL:  http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe
完全按照默认选项安装。
 
Git
URL:  http://code.google.com/p/msysgit/downloads/list?can=3
除了换行选项,其它都按照默认选项安装
WGet

URL: http://sourceforge.net/projects/gnuwin32/files/wget/1.11.4-1/wget-1.11.4-1-setup.exe/download

解压到c:\MinGW

AutoTools and libcrypt

下载以下文件,并解压到C:\Msys\1.0:
  • http://sourceforge.net/projects/mingw/files/MSYS/msysdev/autoconf/autoconf-2.68-1/autoconf-2.68-1-msys-1.0.17-bin.tar.lzma/download
  • http://sourceforge.net/projects/mingw/files/MSYS/msysdev/automake/automake-1.11.1-1/automake-1.11.1-1-msys-1.0.13-bin.tar.lzma/download
  • http://sourceforge.net/projects/mingw/files/MSYS/msysdev/libtool/libtool-2.4-1/libtool-2.4-1-msys-1.0.15-bin.tar.lzma/download
  • http://prdownloads.sourceforge.net/mingw/libcrypt-1.1_1-2-msys-1.0.11-dll-0.tar.lzma
  • http://sourceforge.net/projects/mingw/files/MSYS/Extension/perl/perl-5.8.8-1/perl-5.8.8-1-msys-1.0.17-bin.tar.lzma/download
  • http://sourceforge.net/projects/mingw/files/MSYS/Extension/m4/m4-1.4.14-1/m4-1.4.14-1-msys-1.0.13-bin.tar.lzma/download

Glib and PKG-CONFIG

同样下载以下文件并解压到C:\Msys\1.0

需要注意的是第一个链接需要下载最新版本,目前测试通过最新版本是glib 2.28, non-dev版本

  • 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.1版本的时候需要 xgettext, msgmerge, msgfmt等等,但这里又变成了需要libiconv,作者不能肯定这里提供的资料是否完整。

添加PKG配置路径变量

在C:\MSys\1.0\msys.bat添加,据wangyong0921翻译,可以直接运行msys.bat,然后输入下面的语句

set PKG_CONFIG_PATH=/win32/lib/pkgconfig

编译LUA工具

VLC采用LUA脚本语言,我们需要先编译LUA工具

URL:http://www.lua.org/ftp/lua-5.1.4.tar.gz

解压到home文件夹(C:\MSys\1.0\home\<username>)

运行Msys并执行下列指令

cd /home/<username>/lua-5.1.4
make mingw
make install


VLC源代码

好吧,终于要进入正题了。。

Git

-------------------------

打开Git,下载contrib

git clone git://git.videolan.org/vlc.git

获取预编译contrib

------------------------

cd vlc/contrib
mkdir win32 && cd win32
../bootstrap --build=i586-mingw32msvc
make prebuilt

这里需要注意几点

1.如果执行过../bootstrap --build=i586-mingw32msvc,再次执行该指令可能会提示unlink command not found,手动删除win32目录,然后重新执行上面的指令即可。

2.在git中直接输入make prebuilt,可能会提示make command not found,请改成输入* make prebuilt

3.在笔者电脑上,运行git执行* make prebuilt不能正常执行make prebuilt,后来无奈将下载的vlc目录copy到home目录下(C:\MSys\1.0\home\<username>),运行msys并打开\home\<username>\vlc\contrib,执行上面的语句。

4.执行make prebuilt可能会出错,笔者第一次执行的时候连i586-mingw32msvc文件夹都没有生成,后来无奈把整个contrib都删除了,重新执行上面的步骤才得以继续。
5.make prebuilt提示错误:
sed:invalid option --i
MSYS-Shipped不支持-i选项,需要修改change_prefix.sh
用文本编辑器打开"/home/vlc/contrib/src/change_prefix.sh",
将里面的
        echo "Fixing up $file"sed -i.orig -e "s,$old_prefix,$new_prefix,g" $filerm -f $file.orig 
修改为
        echo "Fixing up $file"
#        sed -i.orig -e "s,$old_prefix,$new_prefix,g" $file
    sed -e "s,$old_prefix,$new_prefix,g" $file>$(file).new
    mv $file.new $filerm -f $file.new
重新执行上面的步骤。
6.执行make prebuilt正常生成i586-mingw32msvc后,仍然可能会报错,并且中断make prebuilt,错误提示为:
tar: i586-mingw32msvc/lib/libdts.a: Cannot create symlink to `/home/jb/vlc/contrib/i586-mingw32msvc/lib/libdca.a': No such file or directory
tar: Error exit delayed from previous errors
make: *** [prebuilt] Error 2
手动执行后续指令即可:
mv i586-mingw32msvc ..
cd ../i586-mingw32msvc
change_prefix.sh
7.执行change_prefix.sh时,可能提示
mv: cannot move `./change_prefix.sh.tmp' to `./change_prefix.sh': Permission denied
无视掉这个错误,应该不会影响正常编译。根据个人理解,应该是脚本想修改本身文件失败了。
mv $file.new $file.
 
最后的更改:whoami和hostname
 
whoami和hostname是用来在vlc的about对话框显示编译者和主机名的辅助工具,但是whoami在windows下是无效的,而hostname不支持编译时使用的-f选项
 
最好是通过下载并安装GNU whoami和hostname来解决这个问题,文件下载的具体链接可能有所变化,请自己从文件夹中寻找对应的文件。
    1. http://sourceforge.net/projects/mingw/files/MSYS/Base/coreutils
     这里有很多版本,一般来说高版本的文件会比较好,找到类似coreutils-5.97-2-msys-1.0.11-ext.tar.lzma (注意有-ext )的文件,解压并将who.exe、whoami.exe、hostname.exe复制到C:\msys\1.0\bin
    2.http://sourceforge.net/projects/mingw/files/MSYS/Base/libiconv/
    同样选择最新的版本,下载类似libiconv-1.13.1-2-msys-1.0.13-dll-2.tar.lzma(文件名带dll)的文件下载,并解压dll到C:\msys\1.0\bin
    3.http://sourceforge.net/projects/mingw/files/MSYS/Base/gettext/
    选择最新版本,找到类似libintl-0.17-2-msys-dll-8.tar.lzma(文件名带dll)的文件,下载并解压dll到C:\msys\1.0\bin
如果你懒得下这些东西,可以通过下面的方法来解决问题:
whoami
-----------------------------
新建文件,输入
echo '<username>'
并另存为C:\MSys\1.0\bin\whoami(注意没有扩展名)
 
Hostname
-----------------------------
按照下面的步骤修改configure.ac,让它不再使用'hostname-f'选项
打开C:\MSys\1.0\home\<username>\vlc\configure.ac
搜索并修改下面的内容
old: AC_DEFINE_UNQUOTED(VLC_COMPILE_HOST, "`hostname -f 2> /dev/null || hostname`", [host which ran configure])
new: AC_DEFINE_UNQUOTED(VLC_COMPILE_HOST, "`hostname`", [host which ran configure])

 
 
编译VLC
 
终于到这步了。。激动吗?
使用命令行来编译vlc,重启msys.bat,按照下面的步骤进行编译
 
bootstrap
---------------------------
cd vlc
cp -v /usr/share/aclocal/* m4/
bootstrap 

这里我遇到了个问题,执行bootstrap的时候提示 GNU Gettext appears to be missing or out-of-date
可以继续执行,没有管他。。
 
这里出现过一次错误,
autom4te-2.68:failed to run /bin/m4: Bad file number
aclocal: /usr/bin/autom4t3-2.68 failed with exit status: 1
autoreconf: failed to run aclocal: Bad file number 
然后就停止执行了,不知道是不是上面某个步骤没搞好导致的,反正删除contrib重新照着流程整一遍就可以了,有哪位遇到过这个问题并解决的话请告诉我,谢谢。
 
执行成功 提示
Successfully bootstrapped
 
Configure
---------------------------
sh extras/package/win32/configure.sh --host=i586-pc-mingw32msvc --disable-nls
如果你想定制选项的话,在这里加上去就好了
 
如果这里遇到了
configure: error: Could not find lua. Lua is needed for some interfaces (rc, telnet, http) as well as many other custom scripts. Use --disable-lua to ignore this error
尝试
sh extras/package/win32/configure.sh --host=i586-pc-mingw32msvc --with-contrib=contrib/i586-mingw32msvc --disable-nls
如果还是不行,就尝试使用 --disable-lua 选项,不过据说没用 
Make(编译)
---------------------------

注意:如果你的<username>的第一个字母是'u'或者'x',将C:\MSys\1.0\home\<username>\config.h中的VLC_COMPILED_BY常量全部改成双反斜杠
执行下面的指令:
PATH=/usr/win32/bin:$PATH make

 
如果这步执行失败了,尝试下面的方法
返回预编译contrib步骤,获取最新版本的contrib
在配置环节(configure-msys.sh),打开文件并添加--disable-upnp
 
生成安装包
---------------------------
make package-win32-base

没有debug信息的普通版本
make package-win32-zip

生成压缩包
make package-win32

生成自安装包,需要在默认路径安装NSIS
make package-win32-base-debug

支持gdb版本
 
如果出现类似
make: *** No rule to make target `package-win32-base'.  Stop.

请使用 package-win32-exe  package-win-base 或common
生成时错误

git、svn、makensis等not found

------------------------------------------------

git:从git安装目录下将git.exe拷到 C:\msys\1.0\bin\.

svn:从collab.net.下载

makensis: 按照下面修改makefile文件

# Create package
#   if makensis -VERSION >/dev/null 2>&1; then \
#       MAKENSIS="makensis"; \
#   elif [ -x "/cygdrive/c/Program Files/NSIS/makensis" ]; then \
#       MAKENSIS="/cygdrive/c/Program\ Files/NSIS/makensis"; \
#   elif [ -x "$(PROGRAMFILES)/NSIS/makensis" ]; then \
#       MAKENSIS="$(PROGRAMFILES)/NSIS/makensis"; \
#   elif wine --version >/dev/null 2>&1; then \
#       MAKENSIS="wine C:/Program\ Files/NSIS/makensis.exe"; \
#   else \
#       echo 'Error: cannot locate makensis tool'; exit 1; \
#   fi; \
#   eval "$$MAKENSIS $(win32_destdir)/spad.nsi"; \
#   eval "$$MAKENSIS $(win32_destdir)/vlc.win32.nsi"
moc、rcc、uic等not found
---------------------------------------
将对应的exe文件复制到sys目录下,如
source: C:\msys\1.0\home\<username>\vlc\contrib\i586-mingw32msvc\moc.exe
target: C:\msys\1.0\bin\moc.exe

------------------------------------------------- 
从1.2版本开始命名有了细微的改变,运行
grep ':' Makefile | grep package-win32

现在看看变成啥样了吧。。
 
==================================================================================
正文结束
==================================================================================
 
声明:
由于本人技术实力和英语水平所限,本篇博文可能存在错误和问题,欢迎各位指出,我将尽快改正。
VLC官网上还有篇文章说明编译VLC可能遇到的问题及解决方法,详见参考资料2的链接,有空的话可能再翻译一下,其实对着错误提示基本上应该都能看得懂的。
 
 
参考资料:
1.http://wiki.videolan.org/Win32CompileMSYSNew
2.http://wiki.videolan.org/Win32CompileMSYSTroubleShooting
3.http://blog.csdn.net/wangyong0921/article/details/8103667
4.http://baike.baidu.com/view/98554.htm

FROM:  http://blog.csdn.net/shen8686/article/details/8533058/

windows平台下VLC2.0.5编译相关推荐

  1. windows平台下用CMake工具编译osg用法说明

    最近研究osg,用CMake工具将osg源码转为VS下的工程.解决方案,开始时不懂,走了很多弯路,现在将自己理解的记录如下: 1):在CMake图形界面中的"Where is the sou ...

  2. windows平台下vlc编译之十三:vlc1.1.0编译

    请移步https://higoge.github.io/,所有下载资料在那个博客都能找到.谢谢. --------------------------------------------------- ...

  3. windows平台下vlc编译之六:vlc-0.9.8a的编译

    请移步https://higoge.github.io/,所有下载资料在那个博客都能找到.谢谢. --------------------------------------------------- ...

  4. windows平台下vlc编译

    转自:http://jeremiah.blog.51cto.com/539865/114190     Jeremiah刚刚工作几个月,参与的第一个项目是与视频监控有关,分配给我的任务就是用开源的vl ...

  5. Windows平台下Makefile学习笔记

    来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安 ...

  6. 3个平台下的ffmpeg——ffmpeg编译

    3个平台下的ffmpeg--ffmpeg编译 ffmpeg编译 需要在3个平台(win\linux\arm)下使用ffmpeg的库,所以进行了ffmpeg的编译. 其中ffmpeg的编译也有许多依赖, ...

  7. Windows平台下Glade+GTK开发环境的搭建

    [@.1 MVVM设计模式与Glade] 做上层软件开发的程序员可能对于MVVM模式比较熟悉,这是一种经典的软件设计模式,很好的将用户界面与后台处理之间分层开,通过属性.事件绑定这种统一的" ...

  8. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  9. Windows平台下Git服务器搭建

    初识Git Git是什么? Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑, ...

最新文章

  1. divideSentence
  2. 【数字信号处理】离散时间系统稳定性 ( 稳定性概念 | 稳定性用法 )
  3. c语言选择排序_冒泡、插入、选择排序(C语言)
  4. Python3 三步爬楼梯问题
  5. excel转word_excel怎么转word?常用方法合集,看你使用哪一种
  6. [详细]分享验证码接收平台工作原理
  7. 如何0成本搭建外卖CPS返利小程序
  8. 基于NET Core 的Nuget包制作、发布和运用流程
  9. 网络诊断,浏览器不能上网,其他软件都能上网
  10. HDLBits——Replication operator位扩展 (非常有用的一道题目)
  11. 公钥,私钥,数字签名,证书图解(转)
  12. [硫化铂]treecnt
  13. SpringBoot单元测试之mock静态方法
  14. 人工智能-三连子游戏设计和实现
  15. ArcMap实现CAD图的空间配准
  16. 时序逻辑电路的设计(二) -- 篮球比赛24秒倒计时电路(附Multisim)
  17. 前端复杂表格导出excel,一键导出 Antd Table 看这篇就够了(附源码)
  18. java 密码界面_忘记密码界面
  19. Java编写飞行游戏
  20. 监控体系之一监控数据采集

热门文章

  1. 计算机4级与华为,华为Matebook对比Surface Pro 4:完爆还是逆袭?
  2. 常用命令之思科常用基础配置
  3. 基于百度地图的交通查询的毕业设计(android)
  4. 分享ThinVirt云桌面软件实现NVIDIA P40显卡为虚拟机分配vGPU过程
  5. --守望先锋中你不知道的秘密--
  6. OpenGL ES 开篇
  7. 亚商投资顾问 早餐FM/0919世界制造业大会将召开
  8. SQL Server数据库DBA具体是做什么的???
  9. 使用Apache POI将ppt截屏成png格式(+背景和图片)
  10. 分享一个有关Android从小白到资深工程师的故事