轉自: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.
步驟一:解壓源碼和第三方庫。
源檔案:http://download.videolan.org/pub/videolan/vlc/0.8.6i/vlc-0.8.6i.tar.gz
庫:http://download.videolan.org/pub/testing/win32/contrib-20070530-win32-bin-gcc-3.4.5-only.tar.bz2
将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
為:
#*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
*cygwin*) output=`$echo $output` ;;
步驟六: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"
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
解決方案:




typedef
long off_t;


#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'
Destroy':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:376: und
efined reference to `_dca_free'
CloseFilter':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:430: und
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
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'
修改"/tmp/vlc-0.8.6i"目錄下的vlc-config 檔案
dtstofloat32)
ldflags="${ldflags} -ldts_pic"
為:
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
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x4e5): undefined refer
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x57f): undefined refer
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x5d5): undefined refer
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x66f): more undefined
references to `_ntohl@4' follow
make[4]: *** [libflacdec_plugin.dll] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/codec'
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/codec'
修改"/tmp/vlc-0.8.6i"目錄下的vlc-config 檔案
flacdec)
ldflags="${ldflags} -lFLAC"
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'






一般會遇到這四個錯誤,如果還出現了其他錯誤,肯定是哪一步搞錯了,如果還是有錯誤,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目錄下執行以下指令。增加兩個檔案的運作權限。
- 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). 密碼:發郵件給我(
),我會告知。
)
2. 解壓完庫檔案做一點點清理工作
rm -rf /usr/win32/bin/moc
rm -rf /usr/win32/bin/rcc
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(見附件)。
--disable-cddax --disable-vcdx --enable-goom /
--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]: Leaving directory `/cygdrive/c/vlc/modules/gui'
make[3]: Leaving directory `/cygdrive/c/vlc/modules/gui'
make[2]: Leaving directory `/cygdrive/c/vlc/modules'
make[1]: Leaving directory `/cygdrive/c/vlc'
需要去下載下傳兩個檔案:
1. [url]http://linux.rz.ruhr-uni-bochum.de/download/cygwin/release-2/w32api/w32api-3.11-1.tar.bz2[/url]
2. [url]http://downloads.videolan.org/pub/videolan/vlc/0.8.5/contrib/qt4-4.4.1-win32-bin.tar.bz2[/url]
運作解壓指令解壓這兩個包。
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
make[6]: *** [libqt4_plugin.la] Error 1
make[6]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui/qt4'
make[5]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui/qt4'
make[4]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui'
make[3]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui'
make[2]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules'
make[1]: Leaving directory `/home/wangwei1/vlc-0.9.4'
将剛才解壓得到的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(見附件)如下:
./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
以及:[url]http://www.jbkempf.com/blog/post/2007/12/14/Configure-step-in-VLC-building[/url]
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 /
--enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac /
--with-ffmpeg-zlib /
--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_udp_plugin.dll
libffmpeg_plugin.dll
libfloat32tos16_plugin.dll
libfloat32_mixer_plugin.dll
libipv4_plugin.dll
libmpgatofixed32_plugin.dll
libs16tofixed32_plugin.dll
libs16tofloat32swab_plugin.dll
libs16tofloat32_plugin.dll
libs8tofloat32_plugin.dll
libu8tofixed32_plugin.dll
libu8tofloat32_plugin.dll
libvobsub_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)在我的公共郵箱提供了下載下傳,具體下載下傳方式為:
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. 下載下傳源碼和庫:
源碼:[url]http://download.videolan.org/pub/videolan/vlc/0.9.6/vlc-0.9.6.tar.bz2[/url]
庫:
http://www.namipan.com/downfile/contrib-20081021-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2/7691f26e0285d472e5642666e3c6cbf94d2bd21d7032ea01
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.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 /
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]: Leaving directory `/home/wangwei1/vlc-0.9.6/src'
make[1]: Leaving directory `/home/wangwei1/vlc-0.9.6'
打開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。
轉自:http://jeremiah.blog.51cto.com/539865/114190











