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

时间:2021-02-24 05:56:28

参考: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支持直接解压到哪里

Glib and PKG-CONFIG

同样下载以下文件并解压到C:\Msys\1.0    (解压到Bin share 等目录) 7-zip支持直接解压到哪里

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


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