windows平台下最新版VLC编译 MSYS (2.2.0)

参考:1.windows平台下VLC2.0.5编译  http://blog.csdn.net/shen8686/article/details/8533058

           2.官网编译:http://wiki.videolan.org/Win32CompileMSYSNew


1.解压工具 7-zip

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:    (解压到Bin share 等目录) 7-zip支持直接解压到哪里

  • 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    (解压到Bin share 等目录) 7-zip支持直接解压到哪里

需要注意的是第一个链接需要下载最新版本,目前测试通过最新版本是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


添加PKG配置路径变量

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

set PKG_CONFIG_PATH=/win32/lib/pkgconfig   加到msys.bat里的第一行


编译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


5.执行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 ..   //实际不用mv   直接cd 就行了
cd ../i586-mingw32msvc
change_prefix.sh


6.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" $file
        rm -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 $file         rm -f $file.new
重新执行上面的步骤。



7. 执行change_prefix.sh时,可能提示
mv: cannot move `./change_prefix.sh.tmp' to `./change_prefix.sh': Permission denied
无视掉这个错误,应该不会影响正常编译。根据个人理解,应该是脚本想修改本身文件失败了。

 不过这里要等好久,要有点耐心!
 
最后的更改: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>'           echo  administrator
并另存为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重新照着流程整一遍就可以了,有哪位遇到过这个问题并解决的话请告诉我,谢谢。
关于这个搞了我N天,最后发现是这样就可以解决:
dos2unix configure.ac

 
执行成功 提示
Successfully bootstrapped
 
 
Configure
---------------------------
 
sh extras/package/win32/configure.sh --host=i586-pc-mingw32msvc --disable-nls
sh extras/package/win32/configure.sh --host=i586-pc-mingw32msvc --disable-nls --enable-debug  //这样会出现live555错误
sh extras/package/win32/configure.sh  --with-contrib=contrib/i586-mingw32msvc --disable-nls --enable-debug //OK

如果你想定制选项的话,在这里加上去就好了
 
如果这里遇到了
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
尝试
 --disable-lua
如果还是不行,就尝试使用 --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

出现问题:

“/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x3fb): undefined refer 
ence to `_ntohl@4' 

这是由于contrib里面的某个库没有链接ws2_32库导致的

根据错误信息,发现是\vlc\win32\modules\codec这个文件夹下发生的

打开该文件夹下的 Makefile 文件,搜索“-lFLAC”

找到两处地方

FLAC_LIBS = -Le:/tianminProject/VLC/vlc/contrib/mingw32/lib -lFLAC -lm -logg   -lws2_32

LIBS_flac = -Le:/tianminProject/VLC/vlc/contrib/mingw32/lib -lFLAC -lm -logg  -lws2_32

分别在末尾 添加 -lws2_32 ,链接 ws2_32 库  


 
生成时错误
 

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
------------------------------------------------- 



你可能感兴趣的:(windows平台下最新版VLC编译 MSYS (2.2.0))