参考: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]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 除了换行选项,其它都按照默认选项安装
MinGW Installed? [y]
path to MinGW: [c:/MinGW]
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里的第一行
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
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
sed:invalid option --iMSYS-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])编译VLC 终于到这步了。。激动吗?使用命令行来编译vlc,重启msys.bat,按照下面的步骤进行编译 bootstrap---------------------------
new: AC_DEFINE_UNQUOTED(VLC_COMPILE_HOST, "`hostname`", [host which ran configure])
cd vlc这里我遇到了个问题,执行bootstrap的时候提示 GNU Gettext appears to be missing or out-of-date 可以继续执行,没有管他。。 这里出现过一次错误,
cp -v /usr/share/aclocal/* m4/
bootstrap
autom4te-2.68:failed to run /bin/m4: Bad file number然后就停止执行了,不知道是不是上面某个步骤没搞好导致的,反正删除contrib重新照着流程整一遍就可以了,有哪位遇到过这个问题并解决的话请告诉我,谢谢。 关于这个搞了我N天,最后发现是这样就可以解决:
aclocal: /usr/bin/autom4t3-2.68 failed with exit status: 1
autoreconf: failed to run aclocal: Bad file number
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
生成自安装包,需要在默认路径安装NSISmake 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 packagemoc、rcc、uic等not found--------------------------------------- 将对应的exe文件复制到sys目录下,如
# 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"
source: C:\msys\1.0\home\<username>\vlc\contrib\i586-mingw32msvc\moc.exe
target: C:\msys\1.0\bin\moc.exe
-------------------------------------------------