windows平臺下VLC2.0.5編譯

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:

     MinGW是指只用自由軟件來生成純粹的Win32可執行文件的編譯環 境,它是Minimalist GNU on Windows的略稱。這裏的“純粹”是指「使用msvcrt.dll應用程序」。無法使用MFC (Microsoft Foundation Classes微軟基礎類庫)。
     MinGW:即Minimalist GNU for Windows。它是一些頭文件和函數庫的集合,該集合允許人們在沒有第三方動態鏈接庫的情況下使用GCC(GNU Compiler C)產生Win32程序。
     MinGW主要由GNU binary utilities、GCC和GDB組成。同時還包括一些必要的庫,例如libc(C Runtime),及專門用於Win32環境的API接口庫。如果你想學習linux環境下的編程,而又不想裝linux,那你就裝一個MinGW吧。
 
MSys:
     MSys:是MinGW的輔助編譯環境,通過它可以很方便的在windows下編譯vlc,不過需要注意的是,你同樣需要在linux下進行交叉編譯,因爲這樣會更快也更簡單。
 
 
準備工作
 
文本編輯器
--------------------------
官網推薦的是notepad/notepad++,不過我還是習慣使用ultraedit,這裏就不放鏈接了,網上破解版很多。。
 
解壓工具
--------------------------
解壓工具推薦的是7-zip,非常流行的解壓軟件。
 
windows下的GNU環境
 
注意:在開始編譯之前,請確認你的windows登陸用戶名是沒有空格的,否則請改換用戶名再開始編譯。
後文提到的<username>就是你的windows登陸用戶名,不再複述。
 
MinGW
-----------------------------------
安裝TDM/MinGW
運行安裝嚮導:
選擇         Create
選擇         32bit
安裝目錄  c:\MinGW 
(注意:我安裝的時候默認是c:\MinGW32,請手動修改)
其它選項默認
 
MinGW Utils
解壓到 c:\MinGW
 
MSys
----------------------------
 
安裝MSys
安裝時選擇默認路徑 c:\Msys\1.0
安裝完會跳出黑框,按照以下內容選擇
Accept Post Install: [y]
MinGW Installed?     [y]
path to MinGW:       [c:/MinGW]
 
MSys Developer Toolkit
完全按照默認選項安裝。
 
Git
除了換行選項,其它都按照默認選項安裝

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:

Glib and PKG-CONFIG

同樣下載以下文件並解壓到C:\Msys\1.0

需要注意的是第一個鏈接需要下載最新版本,目前測試通過最新版本是glib 2.28, non-dev版本


注意:作者在編譯glib 2.1版本的時候需要xgettext, msgmerge, msgfmt等等,但這裏又變成了需要libiconv,作者不能肯定這裏提供的資料是否完整。

添加PKG配置路徑變量

在C:\MSys\1.0\msys.bat添加,據wangyong0921翻譯,可以直接運行msys.bat,然後輸入下面的語句

set PKG_CONFIG_PATH=/win32/lib/pkgconfig


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

 

這裏需要注意幾點

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,執行上面的語句。


4.執行make prebuilt可能會出錯,筆者第一次執行的時候連i586-mingw32msvc文件夾都沒有生成,後來無奈把整個contrib都刪除了,重新執行上面的步驟才得以繼續。

5.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
重新執行上面的步驟。

6.執行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 ..
cd ../i586-mingw32msvc
change_prefix.sh

7.執行change_prefix.sh時,可能提示
mv: cannot move `./change_prefix.sh.tmp' to `./change_prefix.sh': Permission denied
無視掉這個錯誤,應該不會影響正常編譯。根據個人理解,應該是腳本想修改本身文件失敗了。

mv $file.new $file.
 
 
最後的更改:whoami和hostname
 
whoami和hostname是用來在vlc的about對話框顯示編譯者和主機名的輔助工具,但是whoami在windows下是無效的,而hostname不支持編譯時使用的-f選項
 
最好是通過下載並安裝GNU whoami和hostname來解決這個問題,文件下載的具體鏈接可能有所變化,請自己從文件夾中尋找對應的文件。
     這裏有很多版本,一般來說高版本的文件會比較好,找到類似coreutils-5.97-2-msys-1.0.11-ext.tar.lzma (注意有-ext )的文件,解壓並將who.exe、whoami.exe、hostname.exe複製到C:\msys\1.0\bin
    同樣選擇最新的版本,下載類似libiconv-1.13.1-2-msys-1.0.13-dll-2.tar.lzma(文件名帶dll)的文件下載,並解壓dll到C:\msys\1.0\bin
    選擇最新版本,找到類似libintl-0.17-2-msys-dll-8.tar.lzma(文件名帶dll)的文件,下載並解壓dll到C:\msys\1.0\bin
 
如果你懶得下這些東西,可以通過下面的方法來解決問題:
whoami
-----------------------------
新建文件,輸入
echo '<username>'
並另存爲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重新照着流程整一遍就可以了,有哪位遇到過這個問題並解決的話請告訴我,謝謝。
 
執行成功 提示
Successfully bootstrapped
 
 
Configure
---------------------------
 
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
如果還是不行,就嘗試使用 --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
 
生成時錯誤
 

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
------------------------------------------------- 
從1.2版本開始命名有了細微的改變,運行
grep ':' Makefile | grep package-win32
現在看看變成啥樣了吧。。
 
==================================================================================
正文結束
==================================================================================
 
聲明:
由於本人技術實力和英語水平所限,本篇博文可能存在錯誤和問題,歡迎各位指出,我將盡快改正。
VLC官網上還有篇文章說明編譯VLC可能遇到的問題及解決方法,詳見參考資料2的鏈接,有空的話可能再翻譯一下,其實對着錯誤提示基本上應該都能看得懂的。
 
 
參考資料:
發佈了181 篇原創文章 · 獲贊 15 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章