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:
Accept Post Install: [y] MinGW Installed? [y] path to MinGW: [c:/MinGW]
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
- 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
添加PKG配置路徑變量
在C:\MSys\1.0\msys.bat添加,據wangyong0921翻譯,可以直接運行msys.bat,然後輸入下面的語句
set PKG_CONFIG_PATH=/win32/lib/pkgconfig
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,執行上面的語句。
sed:invalid option --i
echo "Fixing up $file"
sed -i.orig -e "s,$old_prefix,$new_prefix,g" $file
rm -f $file.orig
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
mv: cannot move `./change_prefix.sh.tmp' to `./change_prefix.sh': Permission denied
mv $file.new $file.
echo '<username>'
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])
cd vlc cp -v /usr/share/aclocal/* m4/ bootstrap
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
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
PATH=/usr/win32/bin:$PATH make
make package-win32-base
make package-win32-zip
make package-win32
make package-win32-base-debug
make: *** No rule to make target `package-win32-base'. Stop.
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"
source: C:\msys\1.0\home\<username>\vlc\contrib\i586-mingw32msvc\moc.exe target: C:\msys\1.0\bin\moc.exe
grep ':' Makefile | grep package-win32