您的位置:首页 > 其它

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

2015-07-02 18:02 531 查看
/article/2473036.html

参考:1.windows平台下VLC2.0.5编译 /article/2410717.html

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


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

版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: