windows平臺下vlc編譯

轉自:http://jeremiah.blog.51cto.com/539865/114190
    Jeremiah剛剛工作幾個月,參與的第一個項目是與視頻監控有關,分配給我的任務就是用開源的vlc做一個自己的播放器。
    對於開源項目來說,搭建起編譯環境是第一步也是最重要的一步。Jeremiah在歷經5天的痛苦折磨,google出了n多網頁,其中還包括一個德語的網頁和韓語的網頁,終於編譯通過了vlc0.8.6d。百度到的ChinaUnix的一個網頁上面說:編譯vlc感覺就像被...,Jeremiah深有體會啊。不過編譯成功,還是小興奮了一下。啊哈哈~!有些自虐傾向。
    在網上查到一個vlc的qq羣:49846130。裏面人快滿了,不知道什麼時候開個二羣。有興趣的可以加一下,大家共同交流。
    廢話不多說了,步入正題。
    在windows下編譯vlc需要使用仿真Linux環境Cygwin或者Msys+MingW,據說差不多。但是Jeremiah沒有用過後者,所以在這隻介紹Cygwin環境。
 
    編譯之前的說明:由於最近Cygwin更新了庫文件,導致出現了一些新的無法通過編譯的錯誤。Jeremiah將自己的應用的Cygwin-old的庫文件在我的公共郵箱提供了下載,具體下載方式爲:
1). 登錄http://mail.qq.com
2). 用戶名:jeremiah_vlc
3). 密碼:發郵件給我([email protected]),我會告知。
4). 在“我的文件夾”的“Jeremiah_VLC相關資源”有所有資料的超大附件連接。
 
    編譯第一步:去下載Cygwin。給個網址:[url]http://www.cygwin.com/setup.exe[/url]用我上面提供的,選擇從本地安裝
 
    編譯第二步:安裝Cygwin。Cygwin需要安裝到某個盤的根路徑。然後要找個源下載相應的庫,[url]http://www.cygwin.cn/pub[/url]相對比較快, [url]ftp://ftp.sjtu.edu.cn/cygwin/[/url]作爲參考。(如果用的本地的庫文件,就不用寫這一項)然後就需要安裝其他庫來支持vlc的編譯了。目錄如下:
Archive
    unzip (5.52-2)
    zip (2.32-2)
Devel
    autoconf (4-1 2.13-3 2.61-1)
    automake (2-1 1.10-1 1.4p6-4 1.5-2 1.63-3 1.7.9-3 1.8.5-3 1.9.6-2)
    binutils (20080624)
    cvs (1.11.22-1)
    gcc (3.4.4-3)
    gcc-core (3.4.4-3)
    gcc-g++ (3.4.4-3)
    gcc-mingw (20040810-1)
    gcc-mingw-core (20050522-1)
    gcc-mingw-g++ (20050522-1)
    gdb (6.8-2)
    gettext (0.15-1)
    gettext-devel (0.15-1)
    git (1.6.0.2-1)
    libiconv (1.11-1)
    libgcrypt-devel (1.41-4)
    libtool (1.5.27a-1)
    make (3.81-2)
    mingw-runtime (3.15.1-1) 
    nasm (2.02-1)
    patchutils (0.2.31-2)
    pkg-config (0.23a-2)
    subversion (1.5.2-1)
Editor
    vim (7.2-3)
Libs
    expat (2.0.1-1)
    libgcrypt (1.4.1-4)
Web
    curl (optional: for building extras/contrib) (7.16.3-1)
    wget (optional: for building extras/contrib) (1.11.3-1)
經過比較漫長的下載過程,Cygwin就算安裝好了。建議將下載下來的文件(位於安裝文件同目錄)保留下來,下次安裝的時候直接從文件安裝就不用到網上下載了。
    第一次運行Cygwin,如果沒有產生下列代碼:
Copying skeleton files.
These files are for the user to personalise
their cygwin experience.

These will never be overwritten.

`./.bashrc' -> `/home/wangwei1//.bashrc'
`./.bash_profile' -> `/home/wangwei1//.bash_profile'
`./.inputrc' -> `/home/wangwei1//.inputrc'
    則表示windows用戶沒有添加到Cygwin中,運行以下兩條命令添加用戶:
mkpasswd -l [-d] > /etc/passwd
mkgroup -l [-d] > /etc/group
    其中-d可選,如果你在域中,需要用加入'-d 域名'。
    重新開啓Cygwin,在根目錄'/'下就會生成/home/yourname的文件夾。
 
    編譯第三步:下載源碼及第三方庫。vlc的所有的源碼(*.tar.gz,*.tar.bz2)及編譯好的綠色版(win32/*.zip),安裝版(win32/*.exe)都可以在這裏下載:[url]http://download.videolan.org/pub/videolan/vlc/[/url]Cygwin下編譯vlc最關鍵的就是源碼和第三方庫要相匹配,Jeremiah之所以編譯了5天,經歷了n多痛苦的過程,就是因爲沒有匹配好源碼和第三方庫,導致了大量的錯誤。上面網址裏面的vlc的版本很多,相對穩定的是vlc-0.8.6*版本,推薦0.8.6i,匹配的contrib爲:[url]http://download.videolan.org/pub/testing/win32/contrib-20070530-win32-bin-gcc-3.4.5-only.tar.bz2[/url]。Jeremiah寫這篇博客的時候最新的發行版是vlc-0.9.6,其實1.0.0已經在測試了,只是沒有正式發佈而已([url]http://nightlies.videolan.org/[/url]),vlc各個版本的更新日誌參考:[url]http://www.videolan.org/developers/vlc/NEWS[/url]。但是Jeremiah沒有編譯成功vlc-0.9.6,0.9.*版本推薦0.9.4,匹配的contib爲:contrib-20080811-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2。
    Jeremiah將在未來幾篇博客中詳細介紹編譯0.8.6i和0.9.4。
windows平臺下vlc編譯之二:vlc-0.8.6i的編譯
    如果按照上一篇博客《windows平臺下vlc編譯之一:編譯環境構建》安裝好了Cygwin,下載了源碼和第三方庫之後,我們就可以編譯vlc了。這篇博客先講如何編譯vlc-0.8.6i.
 
    步驟一:解壓源碼和第三方庫。
    將vlc-0.8.6i.tar.gz和contrib-20070530-win32-bin-gcc-3.4.5-only.tar.bz2拷貝到/home/username/下面(username爲登陸的用戶目錄),運行以下命令解壓:
tar xjvf contrib-20070530-win32-bin-gcc-3.4.5-only.tar.bz2 -C /
tar xzvf vlc-0.8.6i.tar.gz
    做一點點清理工作
rm -rf /usr/win32/bin/moc
rm -rf /usr/win32/bin/rcc
rm -rf /usr/win32/bin/uic
 
    步驟二:Bootstrap
cd vlc-0.8.6i
./bootstrap
 
    可能出現的錯誤:
+ aclocal-1.9 -I m4
/usr/bin/m4:configure.ac:4643: cannot create temporary file for diversion: Permission denied
autom4te-2.61: /usr/bin/m4 failed with exit status: 1
aclocal-1.9: autom4te failed with exit status: 1
    分析:殺毒軟件有關係,比如Jeremiah用的Mcafee就會出這樣的錯誤。
    解決方法:關閉殺毒軟件重新運行./bootstrap。
 
    步驟三:編輯vlc腳本
    在vic-0.8.6i下新建文本文件"configure-vlc01.sh"(見附件),內容如下:
PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig /
  CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
  LDFLAGS=-L/usr/win32/lib /
  CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
  ./configure /
      --disable-gtk /
      --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
      --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac /
      --with-ffmpeg-zlib --enable-faad --enable-flac --enable-theora /
      --with-wx-config-path=/usr/win32/bin /
      --with-freetype-config-path=/usr/win32/bin /
      --with-fribidi-config-path=/usr/win32/bin /
      --enable-live555 --with-live555-tree=/usr/win32/live.com /
      --enable-caca --with-caca-config-path=/usr/win32/bin /
      --with-xml2-config-path=/usr/win32/bin /
      --with-dvdnav-config-path=/usr/win32/bin /
      --disable-cddax --disable-vcdx --enable-goom /
      --enable-twolame --enable-dvdread /
      --enable-shared-libvlc /
      --enable-debug
    想知道每個--enable,--disable是什麼意思,可以使用如下命令將configure的參數信息保存到confHelp.txt中,以後對照該文件查看修改vlc編譯腳本。
./configure -h > confHelp.txt
 
    步驟四:運行vlc腳本
    轉換下腳本的編碼格式:
dos2unix configure-vlc01.sh
    運行腳本:
./configure-vlc01.sh
    如果腳本遇到了類似Permission denied的錯誤,提升腳本的權限:
chmod 777 configure-vlc01.sh
    如果腳本運行成功,則會顯示如下信息:
vlc configuration
--------------------
vlc version                     : 0.8.6i
system                                : mingw32
architecture                    : i686 mmx
build flavour                 : debug optim devel
vlc aliases                     : svlc wxvlc

You can tune the compiler flags in vlc-config.
To build vlc and its plugins, type `./compile' or `make'.
 
    步驟五:作一點點修改工作
    由於在編譯完成後vlc.exe會要求libvlc.dll.exe,這顯然是不對的。應該直接去調用libtool.dll,解決方案爲:
修改"/tmp/vlc-0.8.6i"目錄下的libtool文件4760行

        prog)
            case $host in
  *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
            esac

爲:

        prog)
            case $host in
  #*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
  *cygwin*) output=`$echo $output` ;;
            esac
    
    步驟六:make
    運行:
make
    如果是雙核的電腦,可以運行:
make -j2
    如果的電腦有N多個cpu,則參數可以爲-jN,N爲cpu個數。這樣能將幾個cpu都利用起來,執行時間會縮短一些。
    make的執行期間可能會出現錯誤,需要修改一些文件,當修改完成後,再執行make,以前make的東西會保留而繼續make剛纔出錯的地方。其實這種方式很方便我們以後修改源代碼,重新make的時候它只會編譯修改的地方,很節省時間。
 
    錯誤1:
In file included from file.c:30:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/sys/stat.
h:113: error: parse error before "off_t"
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/sys/stat.
h:118: error: parse error before '}' token
make[4]: *** [libaccess_output_file_plugin_a-file.o] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/access_output'
make[3]: *** [all-modules] Error 1
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/access_output'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.8.6i'
make: *** [all] Error 2
    解決方案:
//在"/usr/i686-pc-mingw32/include/sys"目錄下的stat.h的文件開始處添加如下代碼

#ifndef _OFF_T DEFINED
typedef long off_t;
#define _OFF_T DEFINED
#endif
 
    錯誤2:
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o): In function `
Open':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:219: und
efined reference to `_dca_init'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o): In function `
DoWork':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:303: und
efined reference to `_dca_syncinfo'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:312: und
efined reference to `_dca_frame'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:331: und
efined reference to `_dca_blocks_num'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:335: und
efined reference to `_dca_block'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:341: und
efined reference to `_dca_samples'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:331: und
efined reference to `_dca_blocks_num'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o): In function `
Destroy':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:376: und
efined reference to `_dca_free'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o): In function `
CloseFilter':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:430: und
efined reference to `_dca_free'
collect2: ld returned 1 exit status
make[6]: *** [libdtstofloat32_plugin.dll] Error 1
make[6]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/audio_filter/conve
rter'
make[5]: *** [all-modules] Error 1
make[5]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/audio_filter/conve
rter'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/audio_filter'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/audio_filter'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.8.6i'
make: *** [all] Error 2
    解決方案:
修改"/tmp/vlc-0.8.6i"目錄下的vlc-config 文件

dtstofloat32)
        ldflags="${ldflags} -ldts_pic"

爲:

dtstofloat32)
        ldflags="${ldflags} -ldts"
 
    錯誤3:
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x3fb): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x488): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x4e5): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x57f): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x5d5): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x66f): more undefined
references to `_ntohl@4' follow
collect2: ld returned 1 exit status
make[4]: *** [libflacdec_plugin.dll] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/codec'
make[3]: *** [all-modules] Error 1
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/codec'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.8.6i'
make: *** [all] Error 2
    解決方案:
修改"/tmp/vlc-0.8.6i"目錄下的vlc-config 文件

flacdec)
        ldflags="${ldflags} -lFLAC"

爲:

flacdec)
        ldflags="${ldflags} -lFLAC -lws2_32"
 
    錯誤4:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/wchar.h:4
27: error: `off_t' does not name a type
make[3]: *** [libaxvlc_a-main.o] Error 1
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/activex'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/wangwei1/vlc-0.8.6i/activex'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.8.6i'
make: *** [all] Error 2
    解決方案:
//在"/usr/i686-pc-mingw32/include/"目錄下的wchar.h的文件開始處添加如下代碼

#ifndef _OFF_T DEFINED
typedef long off_t;
#define _OFF_T DEFINED
#endif
    一般會遇到這四個錯誤,如果還出現了其他錯誤,肯定是哪一步搞錯了,如果還是有錯誤,RPWT。
 
    步驟七:打包
    執行以下命令就會得到綠色版的vlc:
make package-win32-base
    在vlc-0.8.6i的目錄下又會出現一個目錄vlc-0.8.6i,裏面就是編譯好的vlc了。
    如果執行:
make package-win32-zip
    得到的zip文件就是官網上提供的/win32/*.zip文件了。
    如果想得到安裝文件(後面講ActiveX的時候會用到),首先需要下載NSIS 2.41,給個連接:[url]http://prdownloads.sourceforge.net/nsis/nsis-2.41-setup.exe?download[/url]
    安裝NSIS 2.41,然後在打包好的vlc-0.8.6i下面右鍵vlc.win32.nsi,選擇Compile NSIS .。
    期間會出錯誤,有關Mozilla插件的:
Error in macro InstallFile . macroline 1
Error in . "E:/cygwin/home/wangwei1/vlc-0.8.6i0/vlc-0.8.6i/vlc.win32.nsi" . line 445 -- aborting creation process
    用文本編譯器打開vlc.win32.nsi,在第445行前加上;(分號)註釋起來。
;    !insertmacro InstallFile mozilla/npvlc.dll
    重新Compile NSIS .。運行成功之後,在編譯好的vlc-0.8.6i同級目錄裏面就會出現vlc-${VERSION}-win32.exe這個文件。這個就是自己編譯的vlc的安裝文件了。(文件名應該是vlc-0.8.6i-win32.exe,但是可能NSIS的腳本的問題,${VERSION}替換不了,手動改一下就行了。)
2009-07-09更新:
vlc.win32.nsi的第7行加入
!define VERSION "0.8.6i"
可以解決${VERSION}的問題。
    至此,vlc-0.8.6i算是編譯完成了。
2010-04-09更新:
錯誤修正:
如果運行vlc出現了“Windows無法訪問指定設備...您可能沒有合適權限訪問”,或者“Permission denied”錯誤,請在打包好的vlc-0.8.6i目錄下執行以下命令。增加兩個文件的運行權限。
 
  1. chmod 755 vlc.exe vlc.exe.manifest 
 
windows平臺下vlc編譯之三:vlc-0.9.4的編譯
    如果你已經成功編譯了vlc-0.8.6i,那麼編譯vlc-0.9.4就跟玩似的。
    在這簡單的介紹下編譯過程。如果有什麼不明白的,先好好看看前兩篇日誌。
 
    1. 解壓源碼及庫文件。
注意:如果你編譯過vlc-0.8.6i,請先執行以下命令刪除以前的庫文件。
rm -rf /usr/win32
還是在Windows下直接用rar解壓源文件吧,用tar xzvf來解壓最後可能會出現exe的執行權限問題。
源文件:http://download.videolan.org/pub/videolan/vlc/0.9.4/vlc-0.9.4.tar.bz2,解壓到X:/cygwin/home/yourname下。
第三方庫:contrib-20080811-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2,解壓到X:/cygwin/下。
(
在我的公共郵箱提供了下載,具體下載方式爲:
1). 登錄
http://mail.qq.com
2). 用戶名:jeremiah_vlc
3). 密碼:發郵件給我(
[email protected]),我會告知。
4). 在“我的文件夾”的“Jeremiah_VLC相關資源”有所有資料的超大附件連接。
)
 
    2. 解壓完庫文件做一點點清理工作
rm -rf /usr/win32/bin/moc
rm -rf /usr/win32/bin/rcc
rm -rf /usr/win32/bin/uic
 
    3. 解壓完源碼做一點點修改工作
    用文本編輯器或vi打開vlc-0.9.4/configure.ac,
修改
AM_GNU_GETTEXT_VERSION([0.17])

AM_GNU_GETTEXT_VERSION([0.15])
或運行
sed -i 's/AM_GNU_GETTEXT_VERSION(0.17)/AM_GNU_GETTEXT_VERSION(0.15)/g' configure.ac
 
    4. 執行bootstrap,注意殺毒軟件可能引起會Permission Denied。
./bootstrap
 
    5. 顯示Successfully bootstrapped後就可以編輯vlc腳本了。
    這裏有個問題需要詳細的說明一下,vlc官方提供的第三方庫qt4有問題,相關的skins2不好用。如果禁用掉qt4和skins2,最後得到的vlc沒有界面,可以在命令行下面運行。保存以下腳本爲configure-vlc01.sh(見附件)。(如果想解決qt4的問題,得到有界面的vlc,請直接看8
PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
         --host=i686-pc-mingw32 /
         --disable-gtk /
         --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
         --enable-avcodec --enable-avformat --enable-swscale /
         --enable-faad --enable-flac --enable-theora /
         --with-wx-config-path=/usr/win32/bin /
         --with-freetype-config-path=/usr/win32/bin /
         --with-fribidi-config-path=/usr/win32/bin /
         --enable-live555 --with-live555-tree=/usr/win32/live.com /
         --disable-qt4 --disable-skins2 /
         --enable-caca --with-caca-config-path=/usr/win32/bin /
         --with-xml2-config-path=/usr/win32/bin /
         --with-dvdnav-config-path=/usr/win32/bin /
         --disable-cddax --disable-vcdx --enable-goom /  
         --enable-twolame --enable-dvdread /
         --enable-debug    --enable-dca /
         --disable-mkv --disable-taglib
    運行以下命令運行腳本:
dos2unix configure-vlc01.sh
./configure-vlc01.sh
 
    6. make
make
[or make -j2]
    Jeremiah在make的時候沒有遇到錯誤,如果你遇到錯誤,請把錯誤直接貼到google上搜索解決方法。
 
    7. 打包,根據自己的需求來吧。
make package-win32-base
make package-win32-zip
    關於如何製作vlc的安裝文件,看上一篇日誌吧。(基本上報錯就是一些language的錯誤或者skins、npvlc.dll的錯誤,原則就是哪行出錯了,就用;(分號)把哪行註釋起來。)
 
    8. 解決下qt4的問題。
    先把以下腳本保存爲configure-vlc02.vlc(見附件)。
PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
         --host=i686-pc-mingw32 /
         --disable-gtk /
         --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
         --enable-avcodec --enable-avformat --enable-swscale /
         --enable-faad --enable-flac --enable-theora /
         --with-wx-config-path=/usr/win32/bin /
         --with-freetype-config-path=/usr/win32/bin /
         --with-fribidi-config-path=/usr/win32/bin /
         --enable-live555 --with-live555-tree=/usr/win32/live.com /
         --enable-caca --with-caca-config-path=/usr/win32/bin /
         --with-xml2-config-path=/usr/win32/bin /
         --with-dvdnav-config-path=/usr/win32/bin /
         --disable-cddax --disable-vcdx --enable-goom /
         --enable-twolame --enable-dvdread /
         --enable-debug    --enable-dca /
         --disable-mkv --disable-taglib
    類似於5.執行腳本,可能會出現以下問題:
/usr/win32/include/qt4/QtCore/qatomic_windows.h:394: error: previous declaration
`long int InterlockedIncrement(long int*)' here
make[6]: *** [libqt4_plugin_la-qt4.lo] Error 1
make[6]: Leaving directory `/cygdrive/c/vlc/modules/gui/qt4'
make[5]: *** [all] Error 2
make[5]: Leaving directory `/cygdrive/c/vlc/modules/gui/qt4'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/cygdrive/c/vlc/modules/gui'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/cygdrive/c/vlc/modules/gui'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/cygdrive/c/vlc/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/cygdrive/c/vlc'
make: *** [all] Error 2
    需要去下載兩個文件:
    運行解壓命令解壓這兩個包。
tar xjvf w32api-3.11-1.tar.bz2 -C /
tar xjvf qt4-4.4.1-win32-bin.tar.bz2
    繼續執行make,報錯如下:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/bin/ld: cannot fi
nd -lqjpeg
collect2: ld returned 1 exit status
make[6]: *** [libqt4_plugin.la] Error 1
make[6]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui/qt4'
make[5]: *** [all] Error 2
make[5]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui/qt4'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.9.4'
make: *** [all] Error 2
    將剛纔解壓得到的qt4目錄下面的lib/libqjpeg.a拷貝到/usr/win32/lib中。進入到qt4-4.4.1-win32-bin目錄中執行:
cp lib/libqjpeg.a /usr/win32/lib
    再進入到vlc-0.9.4中執行make,應該就沒有錯誤了。然後可以按照7.打包了。
windows平臺下vlc編譯之四:精簡vlc
    vlc太大,組件太多,我們根據業務需求,能用的僅僅是幾個組件而已,其他不用的我們就該去掉。這裏Jeremiah根據自己的情況精簡了vlc,vlc-0.9.4最後得到的安裝文件3518KB,cab文件3520KB;vlc-0.8.6i的安裝文件3087KB,cab文件3264KB。相對於原來幾十兆來說,小了N多。
 
    1. 業務需求。
    Jeremiah所用的業務需求是:(1)播放本地avi文件。(2)播放ts封裝的rtp流。(3)播放rtsp流。
 
    2. vlc-0.9.4的精簡
    腳本configure-vlc03.sh(見附件)如下:
PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure / 
    --host=i686-pc-mingw32 / 
    --disable-gtk /
    --enable-avcodec /
    --enable-avformat /
    --enable-libmpeg2 /
    --enable-live555 --with-live555-tree=/usr/win32/live.com /
    --disable-nls /
    --disable-skins2 /
    --disable-qt4 /
    --disable-macosx-defaults /
    --disable-hal /
    --disable-dbus /
    --disable-dbus-control /
    --disable-telepathy /
    --disable-mmx /
    --disable-sse /
    --disable-altivec /
    --disable-coverage /
    --disable-release /
    --enable-sout /
    --disable-lua /
    --disable-httpd /
    --disable-libproxy /
    --disable-audioscrobbler /
    --disable-taglib /
    --disable-dvdnav /
    --disable-dshow /
    --disable-bda /
    --disable-smb /
    --disable-dvbpsi /
    --disable-v4l2 /
    --disable-libcdio /
    --disable-libcddb /
    --disable-vcdx /
    --disable-cdda /
    --disable-vcd /
    --disable-dvb /
    --disable-screen /
    --disable-ogg /
    --disable-mkv /
    --disable-mod /
    --disable-mpc /
    --disable-gme /
    --disable-mad /
    --disable-id3tag /
    --disable-swscale /
    --disable-imgresample /
    --disable-faad /
    --disable-real /
    --disable-realrtsp /
    --disable-libtar /
    --disable-a52 /
    --disable-dca /
    --disable-flac /
    --disable-vorbis /
    --disable-tremor /
    --disable-speex /
    --disable-tarkin /
    --disable-theora /
    --disable-dirac /
    --disable-schroedinger /
    --disable-png /
    --disable-zvbi /
    --disable-telx /
    --disable-cmml /
    --disable-kate /
    --disable-x11 /
    --disable-xvideo /
    --disable-glx /
    --disable-xinerama /
    --disable-opengl /
    --disable-sdl /
    --disable-sdl-image /
    --disable-freetype /
    --disable-fribidi /
    --disable-fontconfig /
    --disable-libxml2 /
    --disable-pulse /
    --disable-alsa /
    --disable-upnp /
    --disable-ncurses /
    --disable-visual /
    --disable-atmo /
    --disable-bonjour /
    --disable-libgcrypt /
    --disable-gnutls /
    --disable-remoteosd /
    --enable-shared=yes /
    --enable-x264 /
    --enable-vlc /
    --enable-activex /
    腳本請參考:
./configure -h
 
    make通過只後,刪除locale文件夾,這個文件夾是用本地語言作界面的。刪除plugins中的200多dll,只保留:
libaccess_file_plugin.dll
libaout_directx_plugin.dll
libasf_plugin.dll
libaudio_format_plugin.dll
libavcodec_plugin.dll
libavformat_plugin.dll
libavi_plugin.dll
libconverter_fixed_plugin.dll
libconverter_float_plugin.dll
libhotkeys_plugin.dll 
liblive555_plugin.dll
libmpeg_audio_plugin.dll
libpacketizer_copy_plugin.dll
libpacketizer_h264_plugin.dll
libpacketizer_vc1_plugin.dll
libplaylist_plugin.dll
librc_plugin.dll
librtp_plugin.dll
libsubtitle_plugin.dll
libtrivial_channel_mixer_plugin.dll
libtrivial_mixer_plugin.dll
libts_plugin.dll
libugly_resampler_plugin.dll
libvout_directx_plugin.dll
libwaveout_plugin.dll
    再用.nsi腳本編譯,修改n個錯誤之後就生成了較小的安裝文件了。
 
    3. 精簡vlc-0.8.6i
腳本configure-vlc02.sh(見附件)如下:
    PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig /
    CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
    LDFLAGS=-L/usr/win32/lib /
    CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
    ./configure /
         --with-freetype-config-path=/usr/win32/bin /
         --with-fribidi-config-path=/usr/win32/bin /
         --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac /
         --with-ffmpeg-zlib /
         --enable-live555 --with-live555-tree=/usr/win32/live.com /
         --disable-nls /
         --disable-cddax /
         --disable-vcdx /
         --disable-skins2 /
         --disable-wxwidgets /
         --disable-mozilla /
         --disable-httpd /
         --disable-dvdnav /
         --disable-libcdio /
         --disable-libcddb    /
         --disable-cdda    /
         --disable-sdl /
         --disable-sdl-image /
         --disable-vcd    /
         --disable-dvdread /
         --disable-smb /
         --disable-cmml /
         --disable-alsa /
         --disable-opengl /
         --disable-png /
         --disable-screen    /
         --disable-mkv    /
         --disable-mod    /
         --disable-mpc    /
         --disable-libtar    /
         --disable-speex    /
         --disable-visual    /
         --disable-daap    /
         --disable-bonjour    /
         --disable-gnutls    /
         --disable-vorbis /
         --disable-dts /
         --disable-real    /
         --disable-xml    /
         --disable-x264 /
         --enable-sout /
         --enable-activex /
         --enable-shared-libvlc /
         --enable-release
    make之後刪除http,locale,skins,osdmenu文件夾,plugins保留:
libaccess_file_plugin.dll
libaccess_udp_plugin.dll
libaout_directx_plugin.dll
libasf_plugin.dll
libaudio_format_plugin.dll
libavi_plugin.dll
libffmpeg_plugin.dll
libfloat32tos16_plugin.dll
libfloat32_mixer_plugin.dll
libipv4_plugin.dll
libmpeg_audio_plugin.dll
libmpgatofixed32_plugin.dll
librc_plugin.dll
libs16tofixed32_plugin.dll
libs16tofloat32swab_plugin.dll
libs16tofloat32_plugin.dll
libs8tofloat32_plugin.dll
libsubtitle_plugin.dll
libtrivial_channel_mixer_plugin.dll
libtrivial_mixer_plugin.dll
libts_plugin.dll
libu8tofixed32_plugin.dll
libu8tofloat32_plugin.dll
libugly_resampler_plugin.dll
libvobsub_plugin.dll
libvout_directx_plugin.dll
libwaveout_plugin.dll
    使用.nsi腳本來做安裝文件就ok了。
 
windows平臺下vlc編譯之五:vlc-0.9.6的編譯
    前兩天Jeremiah偶爾用最新的Cygwin編譯了下vlc-0.9.6,好像修改一個錯誤就編譯通過了,很簡單,在這大體寫一下。
   
    1. 安裝最新的Cygwin,圖片見附件(pic.rar)。(如何卸載Cygwin或者使用雙Cygwin,請看下一篇日誌:《Cygwin的卸載與新舊雙版本運行》)
Cygwin下載:[url]http://www.cygwin.com/setup.exe[/url]選擇通過網絡安裝。
強烈建議通過Jeremiah提供的本地文件安裝:
Cygwin-new(20081208)在我的公共郵箱提供了下載,具體下載方式爲:
1). 登錄http://mail.qq.com
2). 用戶名:jeremiah_vlc
3). 密碼:發郵件給我([email protected]),我會告知。
4). 在“我的文件夾”的“Jeremiah_VLC相關資源”有所有資料的超大附件連接。
 
 
Archive    
        unzip 
        zip
Devel    
        autoconf 
        automake  
        binutils 
        cvs 
        gcc 
        gcc-core 
        gcc-g++ 
        gcc-mingw 
        gcc-mingw-core 
        gcc-mingw-g++ 
        gdb 
        gettext 
        gettext-devel
        git 
        libiconv
        libgcrypt-devel
        libtool 
        make 
        mingw-runtime
        nasm
        patchutils
        pkg-config 
        subversion
Editor    
        vim
Libs    
        expat
        libgcrypt
Web    
        curl
        wget
   
    2. 下載源碼和庫:
 
    3. 解壓源文件到e:/cygwin/home/yourname/。解壓庫到e:/cygwin/。
刪除E:/cygwin/usr/win32/bin/的moc,rcc,uic。
修改vlc-0.9.6/configure.ac,
修改
AM_GNU_GETTEXT_VERSION([0.17])

AM_GNU_GETTEXT_VERSION([0.15])
或運行
sed -i 's/AM_GNU_GETTEXT_VERSION(0.17)/AM_GNU_GETTEXT_VERSION(0.15)/g' configure.ac
 
    4. 保存腳本configure-vlc01.sh(見附件)。
PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
         --host=i686-pc-mingw32 /
         --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
         --enable-avcodec --enable-avformat --enable-swscale /
         --enable-faad --enable-flac --enable-theora /
         --enable-live555 --with-live555-tree=/usr/win32/live.com /
         --enable-caca --with-caca-config-path=/usr/win32/bin /
         --with-xml2-config-path=/usr/win32/bin /
         --with-dvdnav-config-path=/usr/win32/bin /
         --disable-cddax --disable-vcdx --enable-goom /
         --enable-twolame --enable-dvdread /
         --enable-debug    --enable-dca /
         --disable-mkv --disable-taglib
 
    5. 運行./bootstrap && dos2unix ./configure-vlc01.sh && ./configure-vlc01.sh && make。
 
    6. 出錯:
_la-vlm.o input/.libs/libvlccore_la-vlmshell.o misc/.libs/libvlccore_la-revision
.o     |    | /usr/bin/sed -e '/^[BCDGRS][ ]/s/.*[ ]/([^ ]*/)//1 DATA/;/^.*[ ]__nm__
/s/^.*[ ]__nm__/([^ ]*/)[ ][^ ]*//1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //' | sort |
uniq > .libs/libvlccore.exp'
make[4]: *** [libvlccore.la] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.9.6/src'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/wangwei1/vlc-0.9.6/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/wangwei1/vlc-0.9.6/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.9.6'
make: *** [all] Error 2
打開libtool第144行:
修改
global_symbol_pipe=""

global_symbol_pipe="sed -n -e 's/^.*[     ]//([ABCDGIRSTW][ABCDGIRSTW]*//)[             ][            ]*//(//)//([_A-Za-z][_A-Za-z0-9]*//)/$///1//2//3 //3/p'"
繼續make && make package-win32-base。
發佈了12 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章